WebSocket请求 - 响应子协议

Ghe*_*lay 69 websocket

WebSocket提供像人类谈话一样的双向通信.客户端可以将数据发送到服务器,服务器可以随时向客户端发送数据.但那个问题呢?请求 - 响应行为?客户端可以向服务器询问某些内容并等待响应.似乎Websocket没有提供将客户端数据(请求)链接到服务器数据(响应)的任何内容.

这可能是子协议的工作,我有一些关于如何做的想法(发送带有请求的id并等待具有相同id的响应,直到超时时间).

为了不重新制作轮子并节省一些时间,我查看了互联网上的现有解决方案,但我没有找到任何相关的(可能是坏关键字).

那么有没有人意识到这种工作或者我错过了什么?

obe*_*tet 46

WebSocket应用程序消息传递协议(WAMP)http://wamp.ws/为此目的在原始WebSocket上提供RPC(远程过程调用)和PubSub(发布和订阅)消息传递模式.

WAMP是一个合适的WebSocket子协议,使用WebSocket作为传输,使用JSON作为有效负载格式.RPC使用3条消息实现,这些消息包含"呼叫ID",用于将异步RPC服务器响应与客户端发起的过程调用相关联.

免责声明:我是WAMP和一些(开源)WAMP实现的作者.这是一个开放的倡议,其他人已经开始上船了.最终,应该有一个WAMP RFC正确定义协议..但它仍处于早期阶段.


fid*_*dur 12

我会使用JSON-RPC 2.0.

http://www.jsonrpc.org/specification

每条消息都是一个JSON对象.协议声明它是否是想要响应(与id耦合)或通知的调用.

JSON-RPC感知应用程序可以轻松检查消息对象是否包含方法,是否表示呼叫,表示响应.

我即将构建一个javascript库来处理websocket上的json rpc,其中ajax作为后备...

  • +1 JSON-RPC 实际上非常适合 WebSocket,特别是 PubSub(尽管 WAMP 网站上的陈述相反)。WebSocket 与 JSON-RPC 最大的假装问题是缺乏响应,因此,据说排除使用 JSON-RPC 并要求在 JSON-RPC over WebSocket 中使用“通知”模式。但是,坚持使用包含“id”(标记非通知模式)元素的 JSON-RPC 调用实际上允许双向异步响应进入该 ID(只需要将 ID 传递给 b/e 上的回调),您可以继续对无响应请求使用通知模式。 (2认同)

Neo*_*Neo 5

(发送带有请求的 id,并等待具有相同 id 的响应,直到超时)

我创建了一个名为 WebSocketR2 的库来实现这一点(其中 R2 表示请求响应): https: //github.com/ModernEdgeSoftware/WebSocketR2

如果连接丢失,它还会处理与服务器的重新连接,如果您通过负载均衡器进行 Web 套接字,这可能会很有帮助。

最终结果是您可以在 Web 套接字发送函数上实现回调,如下所示:

var request = {
    action: "login",
    params: {
        username: "test",
        password: "password"
    }
};

ws.send(request, function(response){
    console.log(response)
});
Run Code Online (Sandbox Code Playgroud)