Websocket同步两路连接

Posted

技术标签:

【中文标题】Websocket同步两路连接【英文标题】:Websocket sync two way connection 【发布时间】:2018-10-31 02:45:25 【问题描述】:

我被限制使用上述数据流。

node.js 服务器接收调用,向通过 websocket 连接到 node.js 服务器的客户端启动命令。

浏览器websocket调用javascript库上的指令后,正常流程在客户端结束。

Es.
REST CALL -> KillAllHumans
NODEJS -> pass KillAllHumans to websocket;
BROWSER -> onmessage -> javascript_library.killAllHumans;

REST ENDPOINT 的一个特殊方法需要返回一个由 javascript 库生成的值,因此 node.js 必须保持挂起状态,直到 websocket 客户端响应。

问题是:有可能吗? 这是浏览器上的简单 websocket 代码。

echo_service = new WebSocket(websocketUrl,"echo-protocol"); 
    echo_service.onmessage = function(event)
    
       var result = javascript_library.manageAction(event.data);
       console.log("killAllHumansResults: "+result);
       return result;
    

return 语句似乎不起作用。

已编辑:

这是接收 REST CALL 的 REST API 的主体。 wsServer 是 websocket 对象类。查看结果变量。这是返回给调用 REST CALL(使用回调函数)的客户端的响应。

var result = this._wsServer.sendMessage(<ip_client>,<parameters>);
 console.log("rest return: "+result);
 callback(error, result);
 return;

对于使用此节点项目的 Websocket 对象: https://www.npmjs.com/package/websocket

发送消息是一个简单的呼叫connection.send(message);

客户端正确接收消息。 “killAllHumansResults”已正确打印。 不幸的是,“rest return:”是未定义的。

很明显,打印是在剩余流程完成之前启动的。

【问题讨论】:

不工作是什么意思?输出是否不正确或不符合您的需求? 删除了一些副词,使陈述更加简洁。清理了一些拼写错误和不一致。 【参考方案1】:

经过一番研究,我找到了一种使用 sleep 库 (npm install sleep) 的解决方法。

this._wsServer.sendMessage(<ip_client>,<parameters>);
 sleep.sleep(5);
 var result = this._wsServer.getReceivedMessage(<ip_client>);
 callback(error, result);
 return;

5 秒足以让客户端将存储在 wsServer 中的数据发回。

【讨论】:

以上是关于Websocket同步两路连接的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket相关

从理论到实例:双工通讯协议 Websocket

WebSocket

再谈 websocket 论架构设计

HTML5 Websocket 在发送消息之前等待连接和就绪状态更改

长连接网关技术专题:爱奇艺WebSocket实时推送网关技术实践