Субпротокол запроса-ответа WebSocket


WebSocket обеспечивает двунаправленную связь, как человек говорит. Клиент может отправлять данные на сервер и сервер может отправлять данные клиенту в любое время. Но как насчет вопроса ? поведение запроса-ответа ? Клиент может что-то спросить у сервера и ждать ответа. Похоже, что Websocket не предоставляет ничего, чтобы связать данные клиента (запрос) с данными сервера (ответ).

Это, вероятно, работа субпротокола и у меня есть некоторые идеи о том, как это сделать (отправить идентификатор с запросом и ждать ответа с тем же идентификатором до периода ожидания).

чтобы не переделывать колесо и сэкономить некоторое время, я искал в интернете существующее решение, но я не нашел ничего связанного (возможно, плохие ключевые слова).

Так кто-нибудь знает об этой работе или я что-то упустил ?

6 60

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)
});