Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Event based asynchronous pattern

351 views

Published on

Présentation du pattern EAP (Event-based Asynchronous Pattern) qui m'a permis de développer un serveur tiers multi-thread et non-blocking de gestion de requêtes. Le projet sur lequel je travaille consiste à développer un serveur qui communique en TCP avec des machines de paiement dans le domaine du stationnement. Nous survolerons aussi les "lock"

Conférencier: André Gagnon

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Event based asynchronous pattern

  1. 1. André Gagnon ing. Cale systems
  2. 2. • Je travaille dans le domaine du Stationnement • Je développe un système de requête réponse d’une borne de paiement vers un dispositif de paiement (Interac, Carte de crédit) • Il peut avoir de 0 à n transactions simultanément, d’où le besoins d’être asynchrone.
  3. 3. • La plupart des dispositif de paiement utilisent, de base, une communisation RS232. • On peut utiliser le USB, LAN, Wifi, mais la communication demeure la même • Un début et une fin de message • Un ACK / NAK • Une longueur de message • Ex: •  <STX>Request<ETX><LRC> •  <ACK> •  <STX>Response<ETX> •  <ACK>
  4. 4. • Le modèle proposé par le fournisseur est un modèle Event Based Asynchronous Pattern. • Il permet d’être multithread • Pas à attendre (WaitOne, WaitAll), cependant, il faut un mécanisme pour rediriger les réponses. • Le modèle utilise les classes suivantes • AsyncOperation • BeginInvoke/EndInvoke • Event/EventHandler • !! Comme par hasard, ca ressemble à du Web. Alors, on ne réinvente pas la roue, on utilise les principe du WEB • https://msdn.microsoft.com/en-us/library/hh191443.aspx
  5. 5. • Sommairement, on crée une « requête » en mode asynchrone, le contrôle est immédiatement retourné à l’appelant. • À L’aide d’event / EventHandler, nous allons recevoir la réponse • ** On doit se retrouver, • State, Id, etc. • Static (Thread safe) • On utilise un header et on peut mettre des trucs dans le header. • Les appels asynchrone proposent tjrs un « UserState » pour passer l’objet que tu veux afin de le récupérer dans le callback. • Header! Comme le HTTP!
  6. 6. • Code code code! • Calling Synchronous Methods Asynchronously • https://msdn.microsoft.com/en-us/library/2e08f6yc(v=vs.110).aspx
  7. 7. • Tableau comparatif • http://stackoverflow.com/questions/9582165/in-c-sharp-net-does- an-async-operation-necessarily-create-a-thread-that-blocks
  8. 8. • Le mot clé LOCK devrait être utilisé pour de petites et courtes opérations. • Dangereux de bloquer des processus • Utile dans le modèle EAP pour conserver des état par « id » puisqu’on est asyncrone est que l’on doit, en quelque sorte, écouter ou questionner l’état du système. • EX:
  9. 9. • Dans mon système, certains objets doivent avoir une durée de vie • Empêche deux requêtes pour un même dispositif en même temps • Bloque les requêtes dans le cas d’Exception qui rendent le système instable • Etc. • Manuellement, on peut utiliser un objet avec une « date » et avoir une mécanique qui enlève ces objets après un certains temps • Le Framework .net offre des objets pour nous simplifier la vie • System.Remoting.Caching

×