Websocket 棘轮事件循环被阻止

Websocket 棘轮事件循环被阻止,websocket,ratchet,reactphp,Websocket,Ratchet,Reactphp,我正在使用ratchet php创建web套接字连接。我连接了一个客户端,然后执行了一个查询(执行查询大约需要20秒),同时我尝试连接另一个客户端,我看到web套接字连接处于挂起状态(仍在尝试切换协议)。稍后,当对初始请求做出响应时,我看到服务器打印了“新连接已建立”(在我的onOpen函数中保留了此语句) 如果react php的工作原理与NodeJs相同,那么即使处理过程需要很多时间,连接是否应该建立起来 为什么web套接字连接因为后面的执行部分而被阻塞?嗯,这并不完全准确。Ratchet

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

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


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

嗯,这并不完全准确。Ratchet PHP和NodeJ不是豆荚中的豌豆。它们的工作方式并不完全相同

Ratchet PHP所做的是利用非阻塞I/O流。这包括从与WS-server的TCP/IP连接到框架提供的任何其他IO连接


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

嗯,这并不完全准确。Ratchet PHP和NodeJ不是豆荚中的豌豆。它们的工作方式并不完全相同

Ratchet PHP所做的是利用非阻塞I/O流。这包括从与WS-server的TCP/IP连接到框架提供的任何其他IO连接


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

那么,您如何使用非阻塞IO流功能而不是自己建立数据库连接呢?那么,您如何使用非阻塞IO流功能而不是自己建立数据库连接呢?