Event based asynchronous pattern

326 vues

Publié le

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

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
326
Sur SlideShare
0
Issues des intégrations
0
Intégrations
5
Actions
Partages
0
Téléchargements
3
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

×