WebSockets在Apache服务器上的开销

3
我使用PHP + Apache + JS + HTML 5构建了一个网站。现在,我需要每秒告诉用户服务器是否已连接并准备好接收数据,或者互联网连接是否丢失/可用,或其他可以告诉用户不要发送数据到服务器的原因,因为服务器或互联网连接不可用。
为此,我可以使用Ajax长轮询,每秒向服务器发出ping请求,但这将在我的Apache服务器上引起大量网络开销,其中我的客户端每次同时在线数约为数万个,因此保持对服务器进行ping操作不是一个好的选择。因此,我决定使用WebSockets。
我已经搜索了大约两天,但尚未找到足够好的文章来回答我关于WebSocketApache + PHP的三个基本问题。
1)一旦与服务器建立了WebSocket连接,它是否像与服务器的长轮询一样保持活动状态,还是有什么机制?我的意思是WebSocket如何维护其与服务器的关系,它是否会不断地与服务器进行轮询,因此客户端和服务器之间始终存在连接?
2)如果您对上述问题的回答是肯定的,那么如果我使用WebSockets,服务器端会有什么网络/IO开销,因为客户端和服务器之间存在持续的连接。想象一下,如果有数十万个客户端同时在线,会产生什么负载对服务器网络或IO造成影响?
3)在使用Apache + PHP时,使用WebSockets的最佳方法是什么?有没有好的文章可以学习如何使用WebSockets与Apache服务器通信?我发现了这个问题,但它没有很好地回答在Apache服务器上使用WebSocket。在这个问题中,它限制了专家不要包括任何具有系统管理员工具的答案,而我正在寻找这样的答案。
我有一个VPS服务器,因此调整和安装一些工具并不是问题。
非常感谢您的帮助。谢谢。

请投反对票的人也请说明原因。 - undefined
1个回答

8

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!让我看一下你提供的参考资料。 - undefined
接受作为答案或不接受? - undefined
如果我接受了,那么就没有人会再关注这个问题,因此我可能会错过获得更好答案的机会。所以,请稍等一下,看看其他人是否有更好的答案,否则我肯定会接受它。 - undefined
根据您的建议,我阅读了关于Mosquito和其他MQTT代理的信息。但是我不理解如果它依赖于WebSockets的话使用它有什么好处,正如在https://dev59.com/8mQo5IYBdhLWcg3wdPAa中所说的那样。 - undefined
主要的好处是能够轻松分配负载,因为你预计会有很多请求。否则,通过php/apache打开一个socket也是可以的。 - undefined
谢谢Volem!正如我承诺的那样,我已经接受了你的答案。再次感谢Volem。 - undefined

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