Apache服务器上的WebSockets开销

时间:2017-07-17 13:18:52

标签: javascript php node.js apache websocket

我已经建立了一个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 Server进行通信?我发现了这个问题,但它并没有很好地回答Using WebSocket on Apache server。在这个问题中,它限制了专家不要包含任何具有系统管理员工具的答案,而如果需要的话,我会要求它。

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

任何帮助都将受到高度赞赏。谢谢你。

1 个答案:

答案 0 :(得分:4)

  

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

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

  

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

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

  

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

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

请考虑查看mosquittohivemqrabbitmq

所有这些都支持WebSockets,所有这些都有其优点和缺点。对它们进行概念的小证明并选择最适合您的方法。