Envoi de messages dans un stream TCP

TCP est basé sur le stream, ce qui signifie que vous envoyez des octets sans que ceux-ci soient nécessairement dans un “message”. Le destinataire peut donc recevoir la moitié d’un message ou un tiers des messages.

Ainsi, dans quelque chose qui ressemble à un jeu dans lequel chaque message a une taille fixe, si je reçois une partie d’un message, je peux le conserver dans une mémoire tampon jusqu’à ce que je reçoive l’autre partie. C’est un peu fastidieux, mais y a-t-il un autre protocole fiable basé sur un message? Il y en a probablement, mais aucune n’est implémentée dans le système d’exploitation comme avec TCP et UDP. Je devrai donc utiliser une bibliothèque, ce qui est bien tant qu’elle est facile à utiliser.

Je pourrais toujours faire un protocole UDP quelque peu fiable. Lequel suggérez-vous?

Vous pouvez implémenter votre propre protocole basé sur ACK sur UDP. Ajoutez le message avec un numéro de message / séquence du côté de l’envoi et transmettez ce numéro à l’expéditeur du côté de l’envoi. Lancez une timer du côté de l’envoi pour chaque message et annulez-la lorsque vous récupérez l’ACK correspondant. Si la timer apparaît, renvoyez le message.

XMPP est beaucoup trop lourd pour cette application.

Si vous recherchez le protocole de la couche de transport, vérifiez SCTP. SCTP est orienté message comme UDP et assure un transport fiable et séquentiel des messages avec un contrôle de congestion tel que TCP.

SCTP n’est pas encore largement utilisé. Je suggère donc d’utiliser TCP avec une sorte de cadrage de message.

Vous pouvez utiliser ØMQ (ZeroMQ) comme infrastructure de messagerie. ZeroMQ assure la transmission fiable des messages via TCP et d’autres mécanismes de transport. Il a une API C et un guide complet.

Notez que vous devrez utiliser une bibliothèque externe pour tous les pairs, mais vous avez dit que cela vous convenait.

Vous pouvez jeter un oeil à XMPP . C’est un protocole basé sur TCP / IP basé sur des messages XML.

Les tampons de protocole, moins connus que XMPP, peuvent présenter un intérêt certain pour votre cas.

http://code.google.com/intl/en-US/apis/protocolbuffers/docs/overview.html