WebSocket请求-响应子目录

WebSocket请求-响应子目录,websocket,Websocket,WebSocket提供了一种双向通信,就像人在说话一样。 客户端可以向服务器发送数据,服务器可以随时向客户端发送数据。 但是请求-响应行为呢? 客户端可以向服务器询问一些问题并等待响应。 Websocket似乎没有提供任何将客户端数据(请求)链接到服务器数据(响应)的功能 这可能是subtocol的工作,我对如何做到这一点有一些想法(在请求中发送一个ID,并在超时时间内等待具有相同ID的响应) 为了避免重新发明轮子并节省一些时间,我在互联网上查找了一个现有的解决方案,但没有找到任何相关的解决方案

WebSocket提供了一种双向通信,就像人在说话一样。 客户端可以向服务器发送数据,服务器可以随时向客户端发送数据。 但是请求-响应行为呢? 客户端可以向服务器询问一些问题并等待响应。 Websocket似乎没有提供任何将客户端数据(请求)链接到服务器数据(响应)的功能

这可能是subtocol的工作,我对如何做到这一点有一些想法(在请求中发送一个ID,并在超时时间内等待具有相同ID的响应)

为了避免重新发明轮子并节省一些时间,我在互联网上查找了一个现有的解决方案,但没有找到任何相关的解决方案(可能是糟糕的关键字)


那么,有没有人知道这类工作或者我遗漏了什么呢?

WebSocket应用程序消息传递协议(WAMP)为此在原始WebSocket之上提供了RPC(远程过程调用)和PubSub(发布和订阅)消息传递模式

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


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

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

看看,这是所有主要Java Web服务器都支持的基于WebSockets的REST协议。

我将使用JSON-RPC 2.0

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

支持JSON-RPC的应用程序可以轻松检查消息对象是否包含表示调用的方法,或者是否包含表示响应的方法

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

看看,它通过简单的消息接口(包括websocket)提供双向的rpc支持

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

首先,这里有sockjs和socket.io示例

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

我创建了一个lib,名为WebSocketR2(其中R2表示请求-响应):

它还处理在连接丢失时重新连接到服务器的问题,如果您正在通过负载平衡器执行web套接字,这可能会有所帮助

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

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

ws.send(request, function(response){
    console.log(response)
});

这个讨论有点晚了,但是,这是一个可以在NodeJS中尝试的被动替代方案。定义数据模型并将websocket连接订阅到模型的特定键。对服务器端变量的任何更改都会自动反映在客户端。我认为这将为您节省大量样板代码。更好的是,您仍然可以使用老式的websocket消息传递与新的被动方式并行。它远不是一个抛光的产品,阵列是一个令人头痛的问题。但如果配合VueJS、React或Svelte等产品,我认为这将为您节省很多麻烦


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

正是我想要的。我同时在Java上工作,而你们似乎没有Java实现,所以我很乐意加入:)太好了!加入我们吧!顺便说一句:我们有一个特定于Android的Java客户端实现:两个WAMP资源:,后者中提到的邮件列表,以及(主要是出于历史原因),Autobahn的邮件列表:.@oberstet我有一个相关和类似的问题,websocket和Apache服务器不断地向客户端发送重复信息,而不是只发送一次。有什么建议吗?我的计划是在js中添加一个JSON-RPC服务器,这样后端可以用同样的方式向浏览器发送请求。+1 JSON-RPC实际上非常适合WebSocket,特别是PubSub(尽管声明与WAMP的站点相反)。WebSocket与JSON-RPC最大的问题是缺少响应,因此,假定排除了使用JSON-RPC,并要求在JSON-RPC中使用“通知”模式。然而,坚持使用包含
id
(标记非通知模式)元素的JSON-RPC调用实际上允许双向异步响应位于该id下(只需将id传递给b/e上的回调)您还可以继续使用通知模式处理无响应请求。WebSocket并不是真正用于那种典型的HTTP请求-响应行为。它们是基于事件的,就像JavaScript事件一样:它们有点不受请求。