2016-04-05 17 views
1

私はRachetを使用しており、与えられたJSコードはhereです。 Chromeのコンソールウィンドウでコードを実行しても、メッセージは表示されません。 conn.send()は未定義言う:WebSocket:クライアント側でメッセージを受け取ることができません

var conn = new WebSocket('ws://localhost:8080'); 
conn.onopen = function(e) { 
    console.log("Connection established!"); 
}; 

conn.onmessage = function(e) { 
    console.log(e.data); 
}; 

更新

サーバーエンドでコード:アクションで

public function onMessage(ConnectionInterface $from, $msg) { 
     $numRecv = count($this->clients) - 1; 
     echo sprintf('Connection %d sending message "%s" to %d other connection%s' . "\n" 
      , $from->resourceId, $msg, $numRecv, $numRecv == 1 ? '' : 's'); 

     foreach ($this->clients as $client) { 
      if ($from !== $client) { 
       print "Someone else is here"; 
       // The sender is not the receiver, send to each client connected 
       $msg = ' Server responds:- '.$msg; 
       $client->send($msg); 
      } 
     } 
    } 

参照してください。クライアントとサーバー enter image description here

更新#2

チェックを次のようにしても問題であるようだ。

if ($from !== $client) {} 

しかし、それはすべてに放送されていることを除去する際に問題がサーバーに次の行だったことが判明したというメッセージ

+0

あなたのPHPコードを共有できますか?具体的には、接続されたクライアントを保管/保管する場所ですか? – brense

+0

@brenseチャットクラスhttp://socketo.me/docs/hello-world – Volatil3

+0

チャットサーバーのウィンドウで、あなたのクライアントが接続していますか? '新しい接続! xxx' – brense

答えて

0

を送ったものにクライアントを接続終了:

if ($from !== $client) {} 

それは、それぞれのクライアントに応答するサーバーをせず、それはそのクライアントないであれば対応するつもりでした。私はちょうどそれに変更しました:

if ($from === $client) {} 

それは私のために働いた。サンプルコードで与えられた!==は、私の場合には、それが唯一のVolatil3 @Server <->Client

+0

ifステートメントをすべて削除して、送信者かどうかに関係なく、すべてのクライアントにメッセージを送信することもできます – brense

0

になりながら1つのクライアントが他に話をする典型的なチャットアプリケーションのためだった、あなたはおそらく私のパッケージhttps://github.com/php-pure/sacky-serverhttps://github.com/php-pure/sacky-client

を試してみることができ私はsacky-サーバーでsocket.io

と同じchannelベース、そしてsacky・クライアントで、あなたのコンソール上で実行/tests/runchannel/channel.htmlに位置オープン2ブラウザのタブを処理するクラスインタプリタを持っています。

関連する問題