多个Websocket的Javascript线程模型

时间:2018-12-20 06:49:48

标签: javascript websocket

我有一个JavaScript客户端,该客户端必须与多个Websocket服务器进行通信。这些服务器之一发送我可以快速处理的小型高频有效载荷,而其他服务器发送较大的低频数据,这需要很长时间才能处理:

this.hifreq = new WebSocket("ws://192.168.1.2:4646/hi");
this.hifreq.onmessage = this.onHighfreqMessage;

this.lofreq = new WebSocket("ws://192.168.1.3:4646/lo");
this.lofreq.onmessage = this.onLowfreqMessage;

我找不到任何精确的文档来表明线程模型的工作方式。似乎每个人都在说浏览器模型是单线程的,因此我无法接收两个有效负载并同时对其进行处理,但是我找不到能说明这一点的单个具体文档。那是对的吗?如果可以,是否有办法在不同线程上处理消息?

我想让页面尽可能地具有响应性,而我目前的理解是,一旦我开始处理大的有效载荷,就无法在后台用高频数据更新页面(几乎可以立即对其进行处理)。

我来自C ++ / Java背景,所以我试图了解我的选择。

1 个答案:

答案 0 :(得分:1)

您可以使用Web Worker来执行繁重的后台任务。请注意,JavaScript似乎仍然是单线程的。您无权访问工作线程中页面的窗口对象。您应该在public static class Colours { public static string Red => nameof(Red); public static string Green => nameof(Green); public static string Blue => nameof(Blue); } 上使用public enum Colours { "Red", "Green", "Blue" } postMessage与主脚本进行通信。