performance - 使用多个 websocket 连接
问题描述
我有一个网站,每个月都有几千次访问,而且还在不断增长。我正在向我的网络添加新的交互式功能。
现在我正在处理问题,我应该为所有功能使用一个 websocket 连接,还是应该为我的应用程序的每个交互功能创建新的 websocket 连接?
我正在考虑性能问题。创建 websocket 意味着我必须将连接保存在服务器上。但是一个用户的多个连接=如果我为每个功能创建新连接,我必须保存的连接量要大得多。
如何处理这个问题的正确方法是什么?
解决方案
我应该为所有功能使用一个 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 的所有情况(注意,它说用例不是通用的)
推荐阅读
- testing - 编写测试时如何检索路线的模型()?
- reporting-services - 无法将 SSRS 或 SSIS 包从 SQL Server Data Tools 包安装到 Visual Studio 2017
- javascript - 如何删除 Ext JS 中的禁用属性
- c# - 我的 wpf 应用程序在 Windows 服务器上的不同行为
- php - openssl_decrypt 图像未显示
- javascript - req.user 没有被派去做出反应
- amazon-web-services - ec2 上的 Scrapy 和烧瓶
- python - PyOpt 安装导致对 `__intrinsic_setjmpex' 的未定义引用
- sql - 从项目数据库中为项目列表创建 sql 查询
- typescript - 配置 Typescript 以使用 html 模块