PHP Ratchet Websocket 减慢服务器速度

问题描述 投票:0回答:1

这是我第一次在这里问问题,但这件事让我抓狂,我真的不知道还能去哪里看。

我在 PHP 上实现了 Ratchet Websocket 服务器,我们没有在服务器上使用 nginx,我们使用 apache 代理通道来处理 websocket 连接。 在我的应用程序中,如果您位于给定页面上,您将连接到 websocket,发送一条订阅消息(因为我们将数据发送给来自同一组的用户,并且我们需要知道每个客户端来自哪个组),然后简单地进行操作等待更新消息。当有人更新数据时,在 PHP 代码更新到数据库并执行任何需要完成的操作之后,我有另一个到 websocket 的连接,它只是简单地连接,发送包含组信息的更新消息并关闭连接。

一切都工作得很好,但有时,如果没有给定的模式,它可能会在 3 天后发生,也可能在 10 天后发生,服务器(通常在流量较高的时候)会同时对所有客户端变慢。虽然这种情况通常发生在高流量期间,但并不总是如此,也不总是在高峰流量时......当它确实发生时,只需重新启动 apache 即可使一切恢复正常。这些时候资源看起来也很好,没有任何东西的使用率高于 15%...

我对 Apache 配置不太了解,我的合作伙伴也不是很了解,所以我们拥有的配置是 Apache 的默认配置,我们正在考虑设置我们自己的自定义配置。

发生了什么事,我们可以说这在某种程度上是 websocket 的错误,因为在尝试重新启动 apache 之前,我们只需删除所有 websocket 连接代码,它就会再次变得稳定,所以看起来它确实以某种方式来自 websocket。我们从与此相关的日志中得到的唯一错误是,当速度开始变慢时,会记录 websocket 连接超时。

WebSocket connection failed: Connection to tls://www.mysite.es:443 timed out after 20 seconds (ETIMEDOUT)

除此之外我们看不到任何东西...

我们的 SocketMaster 也不执行任何数据库连接或繁重的工作负载,我们只是将组和客户端连接存储在对象中,当更新消息到达时,我们检查其中 2 个对象以获取向谁发送消息的信息并循环发送所述消息的给定对象(到目前为止,每组的这些对象的大小从未超过 6 个)。

有没有人经历过这种情况或者知道我可以寻找什么?或者有人遇到过类似的事情吗?

php apache websocket proxypass ratchet
1个回答
0
投票

我面临着确切的保存问题。在某些时候,网络套接字性能会在没有任何明显原因的情况下降低。它会导致所有客户端断开连接,随后他们无法建立连接(因为握手应答仍然很慢)。它发生在完全随机的点(负载完全随机)。你找到解决办法了吗?

© www.soinside.com 2019 - 2024. All rights reserved.