我使用phpwebsocket在localhost上设置了WebSockets服务器。客户端几乎在完全相同的时间向服务器('hi server')发送2条消息
socket.send('hi server');
socket.send('hi server');
服务器正在接收这两条消息并使用“sup client”消息进行回复。
...
case "hi server": $this->send($user->socket,"sup client"); break;
...
function send($client,$msg){
echo "> ".$msg;
$msg = $this->wrap($msg);
socket_write($client,$msg,strlen($msg));
echo "! ".strlen($msg)."\n";
}
...
function wrap($msg=""){ return chr(0).$msg.chr(255); }
php日志如下所示:
客户端接收消息的代码:
socket.onmessage = function(msg)
{
log("Received: " + msg.data);
}
客户端实际登录div元素的内容:
我不知道为什么客户端只在websocket服务器发送2时处理一条消息。我应该在该div标签中有2个'Received:sup client'。我想也许它可能会为JavaScript或其他东西发送消息太快。
答案 0 :(得分:0)
在做了一些测试之后,我发现实际上,只有第一个响应没有被websockets服务器发送。我做了一些谷歌搜索,结果发现phpwebsocket存在问题 - 握手没有正确完成或其他事情。在this page我找到了一个解决方案如下:
更改websocket.class.php中的第102行
From: socket_write($user->socket,$upgrade.chr(0),strlen($upgrade.chr(0)));
To: socket_write($user->socket,$upgrade.chr(0).chr(255),strlen($upgrade)+2);
(增加了一个不间断的空间)
现在工作正常。 :)