【问题标题】:Overhead of WebSockets on Apache ServerApache 服务器上的 WebSocket 开销
【发布时间】:2017-12-22 01:25:17
【问题描述】:

我用PHP + Apache + JS + HTML 5 建立了一个网站。现在有一点我必须每秒告诉用户服务器是否已连接并准备好接收数据和/或互联网连接丢失/可用或其他任何可以告诉用户不要将数据发送到服务器的原因服务器或互联网连接不可用。

为此,我可以转移到Long Polling with Ajax 并保持每秒 ping 我的服务器,但这肯定会在我的 Apache 服务器上造成大量的网络开销,我的客户端一次大约有数万人,所以请继续 ping服务器不是一个好的选择。因此,我决定使用 WebSockets。

我在谷歌上搜索了大约 2 天,但找不到足够好的文章来回答我关于 WebSocketApache + PHP 的 3 个基本问题。

1) 如果一旦与服务器建立 WebSocket 连接,那么它是否像与服务器的长轮询一样保持活动状态,或者它背后的机制是什么?我的意思是 WebSocket 如何保持与服务器的关系,它是否一直与服务器轮询,因此客户端和服务器之间总是存在连接?

2) 如果您对上述问题的回答是肯定的,那么如果我使用 websockets,那么服务器端的网络/IO 开销将是多少,因为客户端和服务器之间存在连续连接。想象一下,如果一次有数十万客户端在线,它将在服务器网络或 IO 上产生什么负载?

3) 在服务器上使用 Apache + PHP 时使用 WebSockets 的最佳方法是什么?关于这方面的任何好文章,我可以研究如何使用 WebSockets 与 Apache 服务器进行通信?我找到了这个问题,但它没有很好地回答Using WebSocket on Apache server。在这个问题中,它限制专家不包括任何具有系统管理工具的答案,而我在需要时要求它。

我有一个 VPS 服务器,所以调整和安装一些工具不是问题。

任何帮助将不胜感激。感谢您的问候。

【问题讨论】:

  • 投反对票的也请说明原因?

标签: javascript php node.js apache websocket


【解决方案1】:

1) 如果一旦与服务器建立了 WebSocket 连接,那么它是否像与服务器的长轮询一样保持活动状态,或者它背后的机制是什么?我的意思是 WebSocket 如何保持与服务器的关系,它是否一直与服务器轮询,因此客户端和服务器之间总是存在连接?

是的,它仍然处于活动状态,并且客户端和服务器之间始终存在连接。但是,客户端需要维护连接并在连接异常时发生。在这种情况下,它是您的 javascript 代码。

2) 如果您对上述问题的回答是肯定的,那么如果我使用 websockets,服务器端的网络/IO 开销将是多少,因为客户端和服务器之间存在连续连接。想象一下,如果一次有数十万客户端在线,它将在服务器网络或 IO 上产生什么负载?

WebSocket 连接在 TCP/IP 级别处理,根据定义,当没有数据通过 TCP 隧道时,它们不是资源消耗操作。因此,与其担心您的 CPU 和内存概念,您还需要担心连接数的限制。如果您期望超过 10000 个并发连接,请考虑为您的套接字连接使用负载平衡器并使用多个服务器。

3) 在服务器上使用 Apache + PHP 时使用 WebSockets 的最佳方法是什么?关于这方面的任何好文章,我可以研究如何使用 WebSockets 与 Apache 服务器进行通信?我发现了这个问题,但在 Apache 服务器上使用 WebSocket 并没有很好地回答。在这个问题中,它限制专家不包括任何具有系统管理工具的答案,而我在需要时要求它。

对于您的这种用例 - 获取服务器的状态,我建议使用消息代理而不是将这个简单的操作加载到 Apache。

请考虑查看mosquittohivemqrabbitmq

它们都支持 WebSockets,它们都有其优点和缺点。对它们进行小型概念证明,然后选择最适合您的。

【讨论】:

  • 不错的答案Volem!让我看看你的参考资料。
  • 作为答案接受与否?
  • 如果我接受它,那么没有人会看这个问题,因此我可能会失去获得更好答案的机会。所以,请稍等,看看其他人有没有更好的答案,否则我肯定会接受。
  • 沃伦!根据您的建议,我阅读了有关 Mosquito 和其他 MQTT 代理的信息。但是如果像stackoverflow.com/questions/16047344/can-a-web-browser-use-mqtt中所说的那样依赖于WebSockets,则无法理解使用它有什么好处@
  • 主要好处是可以轻松分配负载,因为您期望很多。否则通过 php/apache 打开一个套接字也会很好
猜你喜欢
  • 2012-07-05
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
相关资源
最近更新 更多