Websockets服务器是否始终运行每个用户进程?

4
我正在尝试了解WebSocket在服务器端的工作原理。根据我在这里得到的答案,大部分情况下是这样的:
  1. 浏览器连接到服务器
  2. 服务器与用户建立双工持久连接
  3. 服务器为此用户运行代码实例
  4. 这些步骤会重复进行处理其他用户
所以问题是:

服务器是否可以在一个进程中处理所有用户?而不需要将它们分开,就像全局进程一样。

谢谢。
1个回答

7

这与服务器高度相关。

一些示例服务器实现/技术:(显然不是完整的列表)

  1. 每个websocket连接一个进程
  2. 每个websocket连接一个线程
  3. 一个线程管理多个n个websocket连接
  4. 所有websocket连接共享线程池。 (按需拉取线程并使用。如果连接处于空闲状态,则将线程返回到池中。)

您会发现,每种实现都有权衡。

由于websocket不是请求 ->响应方法,因此很难说哪种方法比另一种更好。 您需要了解如何使用websocket来确定最佳方法。

关于此主题的一些想法:(高度基于观点)

  • 您的服务器端是否要进行大量处理? (选择1,2或3技术)
  • 您的服务器端是否要喋喋不休? (选择3或4)
  • 您是否要拥有1个中央websocket服务器实例,与许多客户端交谈(例如聊天服务器)? (选择3或4)
  • 还是您将拥有针对每个用户定制的交互式更新? (例如股票市场活动提要)(选择1,2或4)
  • 想要支持数万(如果不是数十万)的同时连接吗? (选择3或4)
  • 您的最大限制是什么? 内存? CPU? 网络带宽?

谢谢回复。 我计划将Erlang用作服务器端,但是由于我在当前存在的服务器上使用Erlang(例如Cowboy),可能只能采用第一种方式。 但是如果我看看您的想法,似乎对我来说最好的选择是第四种或第四种与第一种混合。 - zr9

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