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
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. • 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. • 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. • 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!
9. • 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:
10. • 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