2010-12-18 17 views
0

phpwebsocketを使用して、ローカルホストにWebSocketsサーバを設定しました。クライアントは、サーバが両方のメッセージを受信し、バックメッセージ「SUPクライアント」と返信されるようにクライアントはウェブソケットを使用しているすべてのメッセージを受信して​​いません

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

ほぼ正確に同じ時間に、サーバー(「HIサーバ」)に2つのメッセージを送信しています。 phplog

メッセージ受信クライアントのためのコード:

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

クライアントが実際にdiv要素の内側にログインしているもの: 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のログには、次のようになります

私はなぜクライアントが1つのメッセージしか処理していないのかわかりません彼はwebsocketサーバー2を送信しました。私は2つの 'Received:supクライアント'そのdivタグにする必要があります。私は多分JavaScriptや何かのためにメッセージを少し速く送ることを考えている。

+1

各メッセージに固有の識別子を送信します。単純なグローバルインクリメント値でさえも可能です。これにより、どのメッセージが失敗しているかを見ることができます。それが一貫して同じものなら、あなたのコードはバグかもしれません。それがランダムであれば、どこかにシステムバグや競合状態があります。 –

+0

Marcありがとう、私はこの問題を最終的に見つけ出すためにこれを使用しました(下記の解決策)。 phpwebsocket ... – mike

答えて

0

もう少しテストした後、実際には、最初の応答だけがWebsocketsサーバーによって送信されていないことがわかりました。私はいくつかのグーグル・グーグルを行い、phpwebsocketという問題があることが判明しました。ハンドシェイクが適切に行われていないか、何か問題がありました。 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(改行なしスペースを追加しました)

は今罰金作品:this pageに私は次のようになります解決策を見つけました。 :)

関連する問題