WebSocket请求 - 响应子协议

时间:2012-06-04 13:42:14

标签: websocket

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

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

为了不重新制作方向盘并节省一些时间,我查看了互联网上的现有解决方案,但我没有发现任何相关的内容(可能是错误的关键字)。

那么是否有人知道这种工作或者我错过了什么?

7 个答案:

答案 0 :(得分:43)

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

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

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

答案 1 :(得分:12)

我会使用JSON-RPC 2.0。

http://www.jsonrpc.org/specification

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

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

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

答案 2 :(得分:2)

查看SwaggerSocket,它是所有主要Java WebServer支持的REST over WebSockets协议。

答案 3 :(得分:1)

我正在使用websockets运行一个简单的请求 - 响应程序。请参阅“Websocket Server Demonstration”。您可以下载网页源代码。

答案 4 :(得分:1)

看一下msg-rpc,它通过简单的消息接口提供双向 rpc支持,包括WebSocket。

不仅简单的rpc,它可以涵盖“客户端请求/服务器响应”行为,它还支持“服务器请求/客户端响应”行为,这是通过Rpc服务。

首先,有sockjs和socket.io示例。

答案 5 :(得分:1)

  

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

我创建了一个完全相同的lib,称为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)
});

答案 6 :(得分:0)

在本次讨论中有些晚了,但是BrokerJS是一种可响应的替代方法,您可以在NodeJS中尝试。定义数据模型,并将Websocket连接订阅到模型的特定键。服务器端变量的任何更改都会自动反映在客户端上。我认为这将为您节省很多样板代码。更好的是,您仍然可以将老式的Websocket消息传递与新的响应式处理方式并行使用。它离抛光产品还很远,阵列令人头疼。但是结合使用VueJS,React或Svelte之类的东西,我认为它将为您节省很多麻烦。

免责声明:我是BrokerJS的作者。