使用多个WebSocket连接

13

我有一个网站,每个月有几千次访问量,并且正在增长。 我正在给我的网站添加交互式的新功能。

现在我正在考虑这个问题,是应该为所有功能使用一个 WebSocket 连接还是为每个交互式功能创建一个新的 WebSocket 连接?

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

如何正确处理这个问题?

1个回答

10

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

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

根据我的个人经验:

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

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

msg = {
  "action": "fly",
   "data": "plane"
}

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

switch(msg.action){
case 'fly': 
serverCommand.fly(msg.data);
break;
// other statements
}

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

serverCommand[msg.action](msg.data);

我想说的是:为了解决性能问题,您不需要打开多个WebSocket。
为同一客户端打开多个WebSocket会使您的代码难以维护,并且您将失去DRY原则。
请查看该答案,不建议打开多个套接字。
以及这个答案,列举了您可能希望为同一客户端打开多个WebSocket的所有情况(请注意,它说使用用例不常见)

1
但是这样不会变慢吗?如果我发送JSON,服务器应该首先解析路由。例如,我将不得不发送{ route:'chat',data:“data”}。 - jejjejd
不会比长轮询慢,也不会比每个请求都建立新连接慢。在性能和逻辑上,大多数情况下使用一个连接,并使用一些预定义的数据包(json / 二进制),这些数据包类似于当前的http请求路由在应用程序中。我不知道您正在使用什么进行http / websocket通信,但例如我在内部使用非常相似的路由等 - 只是将数据转录为发送到客户端的不同格式(websocket上的二进制,http上的json),但是websocket上的json并不像您想象的那样慢,这是一个很好的开始,可以看到如何实现它。 - Seti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接