2010-12-18 240 views
0

我有一个使用phpwebsocket在本地主机上建立的WebSocket服务器。客户端是在几乎相同的时间发送2条消息发送到服务器(“喜服务器”)作为这样客户端没有收到所有使用websocket的消息

socket.send('hi server'); 
socket.send('hi server'); 

服务器接收两个消息和回复背面与该消息“SUP客户端”。

... 
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的日志看起来是这样的: phplog

客户端接收的代码信息:

socket.onmessage = function(msg) 
{ 
    log("Received: " + msg.data); 
} 

什么客户实际的div元素里面记录: client

我不知道为什么客户端只处理一个消息时t他websocket服务器发送2.我应该有2'收到:sup客户'在该div标签。我在想也许它发送的消息对于JavaScript来说太快了。

+1

发送每个消息的唯一标识符。即使是一个简单的全球递增值也可以。这会让你看到哪条消息失败。如果它始终如一,那么也许你的代码是越野车。如果它是随机的,那么在某处存在系统错误和/或竞争条件。 – 2010-12-18 19:21:57

+0

谢谢马克,我用它来最终找到问题(下面的解决方案)。 phpwebsocket ... – mike 2010-12-19 13:01:09

回答

0

在做了一些更多的测试后,我发现实际上,只有第一个响应没有被websockets服务器发送。我做了一些Google搜索,结果发现phpwebsocket有一个问题 - 握手没有得到正确的处理或者什么。上this page我发现,去如下的解决方案:在websocket.class.php

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); 

变更线102(添加了一个不间断空格)

现在工作正常。 :)

相关问题