我有一个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背景,所以我试图了解我的选择。
答案 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
与主脚本进行通信。