95 votes

Sous-protocole de demande-réponse WebSocket

WebSocket permet une communication bidirectionnelle, à la manière d'un être humain qui parle. Le client peut envoyer des données au serveur et le serveur peut envoyer des données au client à tout moment. Mais qu'en est-il de la question ? le comportement demande-réponse ? Le client peut demander quelque chose au serveur et attendre une réponse. Il semble que Websocket ne fournisse rien pour lier les données du client (demande) aux données du serveur (réponse).

C'est probablement le travail du sous-protocole et j'ai quelques idées sur la façon de le faire (envoyer un identifiant avec la requête et attendre une réponse avec le même identifiant jusqu'à une période de timeout).

Afin de ne pas refaire la roue et de gagner du temps, j'ai cherché sur internet une solution existante mais je n'ai rien trouvé (peut-être de mauvais mots-clés).

Y a-t-il quelqu'un qui soit au courant de ce genre de travail ou est-ce que je rate quelque chose ?

59voto

oberstet Points 7409

Le protocole de messagerie d'application WebSocket (WAMP) http://wamp.ws/ fournit des modèles de messagerie RPC (Remote Procedure Call) et PubSub (Publish & Subscribe) au-dessus du WebSocket brut à cette fin.

WAMP est un véritable sous-protocole WebSocket, qui utilise WebSocket comme transport et JSON comme format de données utiles. RPC est implémenté en utilisant 3 messages, et ces messages contiennent un "Call ID" pour corréler les réponses asynchrones du serveur RPC aux appels de procédure initiés par le client.

Avertissement : je suis l'auteur de WAMP et de certaines implémentations (open-source) de WAMP. C'est une initiative ouverte, et d'autres ont déjà commencé à monter à bord. En fin de compte, il devrait y avoir un RFC WAMP définissant correctement le protocole mais il est encore dans les premières étapes.

15voto

fiddur Points 324

J'utiliserais JSON-RPC 2.0.

http://www.jsonrpc.org/specification

Chaque message serait un objet JSON. Le protocole indique s'il s'agit d'un appel qui veut une réponse (couplage avec un identifiant), ou une notification.

Une application consciente de JSON-RPC pourrait facilement vérifier si l'objet message contient une méthode, signifiant un appel, ou non, signifiant une réponse.

Je suis sur le point de construire une librairie javascript pour gérer le rpc json sur websocket, avec ajax comme fallback

2voto

jfarcand Points 1337

Jetez un coup d'œil à la SwaggerSocket qui est un protocole REST sur WebSockets pris en charge par tous les principaux serveurs Web Java.

-- Jeanfrancois

2voto

Andrew Points 3462

Jetez un coup d'œil à msg-rpc il prévoit bidirectionnel Support rpc sur une interface de message simple, incluant WebSocket.

Non seulement le simple rpc, qui pourrait couvrir le comportement "demande du client / réponse du serveur", mais il prend également en charge le comportement "demande du serveur / réponse du client", qui se fait via le service Rpc.

Pour commencer, il existe des exemples de sockjs et socket.io.

1voto

Roger F. Gay Points 734

J'exécute un programme simple de demande-réponse en utilisant des websockets. Voir " Démonstration du serveur Websocket ". Vous pouvez télécharger le code source de la page web.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X