使用多个 websocket 连接

jej*_*ejd 14 performance http websocket

我有一个网站,每月有数千次访问,而且还在不断增长。我正在向我的网站添加新的交互式功能。

现在我正在处理一个问题,我应该为所有功能使用一个 websocket 连接,还是应该为我的应用程序的每个交互功能创建新的 websocket 连接?

我正在考虑性能问题。创建 websocket 意味着我必须在服务器上保存连接。但是一个用户的多个连接=如果我为每个功能创建新连接,我必须保存的连接量会大得多。

处理这个问题的正确方法是什么?

Isr*_*Gab 10

我应该为所有功能使用一个 websocket 连接,还是应该为应用程序的每个交互功能创建新的 websocket 连接?

您应该只有一个 Websocket 连接,没有理由使用多个 Websocket。

从我个人的经验来看

最好的设计是使用 REST API 来处理来自客户端的操作,并仅使用 Websocket 进行通知。使用 REST 将为您管理解析。

无论如何,如果您希望所有应用程序通过 websocket 协议进行通信,您可以通过套接字发送类似的内容

msg = {
  "action": "fly",
   "data": "plane"
}
Run Code Online (Sandbox Code Playgroud)

然后使用 switch case 语句在服务器端处理它:

switch(msg.action){
case 'fly': 
serverCommand.fly(msg.data);
break;
// other statements
}
Run Code Online (Sandbox Code Playgroud)

或者你甚至可以这样做(不需要解析):

serverCommand[msg.action](msg.data);
Run Code Online (Sandbox Code Playgroud)

我想说的是:不需要打开多个websocket来解决性能问题。

通过为同一个客户端打开多个 websocket,您的代码将很难维护,并且您将失去DRY原则。

看看那个答案,它不建议打开多个套接字。

这个答案列举了您可能想为同一客户端打开多个 websocket 的所有情况(注意,它说用例不是公共的