gpt4 book ai didi

websocket - Ratchet 事件循环被阻塞

转载 作者:行者123 更新时间:2023-12-04 16:13:43 26 4
gpt4 key购买 nike

我使用 Ratchet php 创建了一个网络套接字连接。我连接了一个客户端,然后执行了一个查询(执行查询大约需要 20 秒),同时我尝试连接另一个客户端,我看到网络套接字连接处于挂起状态(仍在尝试切换协议(protocol)) .稍后,当初始请求的响应到来时,我看到服务器打印“新连接已建立”(在我的 onOpen 函数中保留了此语句)。

如果 react php 的工作原理与 NodeJs 相同,那么即使处理需要很多时间,是否应该建立连接?

为什么网络套接字连接会因为后面的执行部分而被阻塞?

最佳答案

嗯,这并不完全准确。 Ratchet PHP 和 NodeJS 不是 pod 里的豌 bean 。它们的工作方式并不完全相同。

Ratchet PHP 所做的是利用非阻塞 I/O 流。这就是从 TCP/IP 连接到您的 WS 服务器,到框架促进的任何其他 IO 连接的所有内容。

但是,您确定您正在运行一个查询,我假设它是一个数据库查询?如果您自己建立了与该数据库的连接,而不是通过 Ratchet 的非阻塞 IO 流工具,那么数据库查询将通过阻塞 TCP/UNIX 套接字进行。这意味着,PHP 必须坐在那里等待您的 dbms 响应查询,然后才能继续执行更多代码。因此,与此同时,您的 WebSocket 服务器无法响应任何其他请求、接受任何其他连接,甚至无法运行另一行代码,直到该数据库系统响应,因为 TCP 套接字位于 WAIT 中。状态。它只是坐在那里等待数据通过管道。

关于websocket - Ratchet 事件循环被阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38824506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com