Субпротокол запроса-ответа WebSocket
WebSocket обеспечивает двунаправленную связь, как человек говорит. Клиент может отправлять данные на сервер и сервер может отправлять данные клиенту в любое время. Но как насчет вопроса ? поведение запроса-ответа ? Клиент может что-то спросить у сервера и ждать ответа. Похоже, что Websocket не предоставляет ничего, чтобы связать данные клиента (запрос) с данными сервера (ответ).
Это, вероятно, работа субпротокола и у меня есть некоторые идеи о том, как это сделать (отправить идентификатор с запросом и ждать ответа с тем же идентификатором до периода ожидания).
чтобы не переделывать колесо и сэкономить некоторое время, я искал в интернете существующее решение, но я не нашел ничего связанного (возможно, плохие ключевые слова).
Так кто-нибудь знает об этой работе или я что-то упустил ?
6 ответов:
протокол обмена сообщениями приложения WebSocket (WAMP)http://wamp.ws/ предоставляет шаблоны сообщений RPC (удаленный вызов процедур) и PubSub (публикация и подписка) поверх raw WebSocket для этой цели.
WAMP является правильным WebSocket subprotocol, использует WebSocket в качестве транспорта и JSON в качестве формата полезной нагрузки. RPC реализуется с использованием 3 сообщений, и эти сообщения содержат "идентификатор вызова" для корреляции асинхронных ответов сервера RPC на инициированную клиентом процедуру звонки.
отказ от ответственности: я являюсь автором WAMP и некоторых (с открытым исходным кодом) реализаций WAMP. Его открытая инициатива, с другими уже начали получать на лодке. В конечном счете, должен быть WAMP RFC, правильно определяющий протокол .. но это все еще на ранних стадиях.
Я бы использовал JSON-RPC 2.0.
http://www.jsonrpc.org/specification
каждое сообщение будет объектом JSON. Протокол указывает, является ли это вызовом, который требует ответа (связь с идентификатором) или уведомления.
приложение с поддержкой JSON-RPC может легко проверить, содержит ли объект сообщения метод, означающий вызов, или нет, означающий ответ.
Я собираюсь построить JavaScript lib для обработки JSON rpc websocket, с ajax в качестве резервного...
посмотри SwaggerSocket, который является REST по протоколу WebSockets, поддерживаемому всеми основными веб-серверами Java.
Я запускаю простую программу запроса-ответа с помощью websockets. Смотрите " Демонстрация Сервера Websocket". Вы можете скачать исходный код веб-страницы.
посмотри msg-rpc, это обеспечивает двунаправленный поддержка rpc через простой интерфейс сообщений, включая WebSocket.
не только простой rpc, который может охватывать поведение "запрос клиента / ответ сервера", он также поддерживает поведение "запрос сервера / ответ клиента", которое осуществляется через службу Rpc.
для начала, есть sockjs и socket.io примеры .
(отправить идентификатор с запросом и ждать ответа с тем же идентификатором до периода ожидания)
Я создал lib, который делает именно это, называется WebSocketR2 (где R2 означает ответ на запрос):https://github.com/ModernEdgeSoftware/WebSocketR2
Он также выполняет подключение к серверу, если соединение потеряно, что может быть полезно, если вы делаете веб-сокетов через балансировщик нагрузки.
конечный результат вы можете реализовать обратные вызовы в функции отправки веб-сокета следующим образом:
var request = { action: "login", params: { username: "test", password: "password" } }; ws.send(request, function(response){ console.log(response) });