Choix des transports pour JSON sur TCP
Je suis en train d'écrire un simple streaming JSON service. Il se compose de JSON messages, envoyés par intermittence, pour une longue période de temps (semaines ou mois).
Quelle est la meilleure pratique à l'égard de l'envoi de plusieurs messages JSON sur une plaine socket TCP?
Quelques solutions de rechange, j'ai regardé (et leurs inconvénients) sont:
- newline séparés JSON - inconvénient: les retours à la ligne dans JSON besoin de fuir, ou l'interdiction
- websocket inspiré 0x00-0xff cadrage - inconvénient: il est maintenant binaire, pas en utf-8 plus
- réel websockets - inconvénient: le manque de (opensource) websocket client bibliothèques
- http multipart http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html - inconvénient: incomplet de support client?
- pas de délimiteurs - inconvénient: segmentation nécessite parsing JSON (ne peut pas simplement compter les curlies en raison de curlies dans des chaînes)
Est-il bon, ou au moins bien établi de la façon de le faire?
source d'informationauteur fadedbee | 2011-07-04
Vous devez vous connecter pour publier un commentaire.
mes deux premières options:
Faire ce début de protocoles TCP: envoyer un message (un objet JSON dans votre cas) et fermer la connexion. Le client détecte et le rouvre pour obtenir l'objet suivant.
Faire ce bloc en mode HTTP: d'abord envoyer le nombre d'octets de l'objet JSON, un saut de ligne (CRLF en HTTP), et votre objet JSON. Le client juste le nombre d'octets à savoir quand le prochain octet serait la prochaine objectsize.
Quand vous voulez servir les clients de navigateur, le plus proche que vous obtenez à raw TCP est WebSockets.
WebSockets dispose de suffisamment d'élan que les fournisseurs de navigateur permettra d'améliorer la prise en charge (Chrome 14 et Firefox 7/8 appuyer le dernier projet de protocole) et qu'une large gamme de client et de serveur de cadres de soutien.
Il sont déjà un couple de l'open-source client bibliothèques, y compris Autobahn WebSocket.
Lorsque vous voulez faire cuire quelque chose pour votre propre (sur le haut de raw TCP), je vous recommande une longueur de préfixe de format pour vos messages JSON, c'est à dire Netstrings
Disclaimer: je suis l'auteur de l'Autoroute et de travailler pour Tavendo.
J'ai codifiée ce que j'ai et certaines autres développeurs sont en train de faire:
http://en.wikipedia.org/wiki/Line_Delimited_JSON
Il a l'avantage d'être netcat/telnet compatible.
Voir aussi: http://ndjson.org/
Vous pouvez utiliser Server-Sent Events.