Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Websockets服务器缺少消息_Php_Sockets_Websocket - Fatal编程技术网

PHP Websockets服务器缺少消息

PHP Websockets服务器缺少消息,php,sockets,websocket,Php,Sockets,Websocket,我遵循本教程,在本例中使用的websocket代码的基础上构建了一个应用程序 一切正常,但WebSocket不断在负载下丢弃消息 比如说。我有一个用户键入聊天信息,并使用教程中提供的websocket代码发送它。此外,用户以每秒10次更新的速度从服务器接收消息,用户也以每秒10次更新的速度将消息发送回服务器 因此,如果用户键入聊天信息并发送它。聊天信息被发送,但什么也没发生。据我所知,javascript获取聊天消息,将其转换为json并发送到服务器,而php websocket服务器从未接收

我遵循本教程,在本例中使用的websocket代码的基础上构建了一个应用程序

一切正常,但WebSocket不断在负载下丢弃消息

比如说。我有一个用户键入聊天信息,并使用教程中提供的websocket代码发送它。此外,用户以每秒10次更新的速度从服务器接收消息,用户也以每秒10次更新的速度将消息发送回服务器

因此,如果用户键入聊天信息并发送它。聊天信息被发送,但什么也没发生。据我所知,javascript获取聊天消息,将其转换为json并发送到服务器,而php websocket服务器从未接收到它。这是随机发生的,有时是连续发生的。在VPS上更糟糕。一旦我切换到专用服务器,这种情况就很少发生了

这不仅仅影响聊天信息。它可以是发送的任何WebSocket消息 到服务器。如果javascript只向php websocket服务器发送一条消息,那么该消息最有可能丢失。因此,即使是乒乓球信息也可能丢失

这一切都是在服务器从客户端加载时发生的

示例
客户:Ping
服务器:Pong
客户:Ping
什么也没发生
客户:Ping
服务器:Pong
客户:Ping
服务器:Pong
客户:Ping
什么也没发生
客户:Ping
什么也没发生
客户:Ping
什么也没发生
客户:Ping
服务器:Pong


php websocket教程中的代码是否已损坏?它是可以修复的,还是我必须完全重新编写代码才能适应php Ratchet?

server.php的第59行将您从while和foreach循环中解放出来。简而言之,如果一次处理多条消息,那么根据教程的源代码,将只处理第一条消息,这是完全有意义的。我将测试它。删除中断2;表示服务器只接收消息,不发送任何内容,除非它恰好是对客户端消息的响应。更接近修复,但现在服务器上没有显示任何内容。测试结果表明,它卡在while循环中。因此,在收到下一条消息之前,它永远不会完成接收和响应消息……好吧,再进行一些测试……我让它在while循环中循环三次,以获取单个客户端的消息。我还没有注意到它正在吞噬任何信息。如果消息速率更高,我肯定它会吃掉消息,但目前它还可以正常工作。server.php的第59行将您从while和foreach循环中分离出来。简而言之,如果一次处理多条消息,那么根据教程的源代码,将只处理第一条消息,这是完全有意义的。我将测试它。删除中断2;表示服务器只接收消息,不发送任何内容,除非它恰好是对客户端消息的响应。更接近修复,但现在服务器上没有显示任何内容。测试结果表明,它卡在while循环中。因此,在收到下一条消息之前,它永远不会完成接收和响应消息……好吧,再进行一些测试……我让它在while循环中循环三次,以获取单个客户端的消息。我还没有注意到它正在吞噬任何信息。如果有更高的消息速率,我肯定它会吃掉消息,但现在它工作正常。