Je souhaite envoyer des messages entre processus Ruby via TCP sans utiliser de caractères de fin qui pourraient restreindre le contenu potentiel du message. Cela exclut l'approche naïve socket.puts/gets. Existe-t-il une implémentation de base de message TCP quelque part dans les bibliothèques standard? (Je voudrais éviter Drb pour garder tout simple.)Un simple protocole de messagerie TCP?
4
A
Répondre
6
Il semble qu'il n'y ait pas de solution canonique, réutilisable.
Voici donc une implémentation de base pour les archives:
module Messaging
# Assumes 'msg' is single-byte encoded
# and not larger than 4,3 GB ((2**(4*8)-1) bytes)
def dispatch(msg)
write([msg.length].pack('N') + msg)
end
def receive
if (message_size = read(4)) # sizeof (N)
message_size = message_size.unpack('N')[0]
read(message_size)
end
end
end
# usage
message_hub = TCPSocket.new('localhost', 1234).extend(Messaging)
1
La manière habituelle d'envoyer des chaînes dans cette situation est d'envoyer un entier (encodé comme bon vous semble) pour la taille de la chaîne, suivi de beaucoup octets. Vous pouvez économiser de l'espace tout en autorisant des tailles arbitraires en utilisant un schéma semblable à UTF-8 pour cet entier.
Questions connexes
- 1. WCF Protocole TCP
- 2. protocole Async tcp en C#
- 3. TCP encadrant avec le protocole binaire
- 4. Alternative Python au protocole de messagerie en temps réel d'Adobe
- 5. Comment définir le protocole de messagerie dans JavaMail
- 6. Comment configurer postfix pour un simple service de messagerie automatique
- 7. Forcer le protocole TCP/IP dans la chaîne de connexion
- 8. C#: question de serveur TCP simple
- 9. Application simple de chat TCP asynchrone [C#]
- 10. Quel est le meilleur protocole TCP ou UDP?
- 11. Recherche de modèles pour créer un pool de connexions TCP pour la messagerie haute performance
- 12. Mise en réseau TCP simple avec C#
- 13. Cross plate-forme API TCP/IP simple?
- 14. Très simple C++ TCP Echo serveur
- 15. Accepter() fonction; Serveur tcp simple en C
- 16. Flex to Flex simple connexion TCP
- 17. Utilisation .Net WSDL pour un autre protocole de communication (TCP, etc.)
- 18. Protocole de communication aide
- 19. Un protocole basé sur un protocole existant est-il toujours un protocole?
- 20. Intégrer un serveur de messagerie dans ASP.NET
- 21. Protocole Bluetooth?
- 22. Choisir une solution de messagerie
- 23. Comment puis-je ajouter du cryptage à mon propre protocole TCP à l'aide de Java Sockets?
- 24. Comment reproduire correctement le protocole TCP Prise de contact à 3 voies avec des sockets raw?
- 25. Protocole pour serveur VisualSVN
- 26. Comment créer un message à partir de segments tcp
- 27. asp.net envoyer un problème de messagerie
- 28. Transfert de fichiers TCP Problème
- 29. Tibco contre TCP (Rendezvous/RV)
- 30. Bon protocole basé sur TCP asynchrone pour les jeux non-temps réel?
Oui, je sais et je me demande s'il y a une bibliothèque canonique qui implémente un tel protocole n. –