2011-10-18 10 views
0

node.jsとsocket.ioでちょっと遊んでいます。これは私が書いているコードです:socket.io node.js/express.jsで問題を起こしました

app.get('/play', function (req, res) { 
//some code you don't need to see 
var gameMessage = io.of('/game'+gameId); 
}); 

すべてが正しくインポートされています。 gameIdが正しく設定され、io変数が正しく初期化されています。 (ローカルホスト/遊びにアクセスしようとしたときに)このコードを実行しているとき、私はこのエラーを取得:

TypeError: Converting circular structure to JSON 
    at Object.stringify (native) 
    at Array.<anonymous> (/path/to/my/game/node_modules/express/node_modules/connect/lib/middleware/session/memory.js:74:31) 
    at EventEmitter._tickCallback (node.js:126:26) 

私はコードのvar gameMessage行をコメントアウトした場合、私はエラーを取得しないでください。それはそれを生成しています。

私が必要とするチャネルをインスタンス化しているので、その行がそこにとどまるようにしたいと思います。このようにして、2人のプレイヤーが私のゲームを一緒にプレイできます。私はそれをインスタンス化し、

var chat = io.connect('http://localhost/chat' + gameId); 
     chat.emit('guess', { 
      guess: "ciao" 
     }); 
     chat.on('guess', function (data) { 
      alert(data); 
     }); 

のように、クライアント側でいくつかのコードを実行しようとしていない場合、2番目のプレーヤーが接続されているように私は、コンソールにエラーの無限ループを取得します。

誰かがこれに間違っていると推測できますか?ありがとう。

答えて

1

あなたがしていることは間違っています。そのSocket.IOコードをあなたのルートに入れてはいけません.Express.jsのappsとSocket.IOのアプリケーションはそういった "接続"しません。

Socket.IOサーバーと別のファイルを作成し、Socket.IO(サーバー側またはクライアント側)に接続してメッセージなどを送信する場合は、socket.io-clientを使用します。

+0

プレーヤーのペアごとに別々のチャンネルを用意したいと思いますが、これらのチャンネルは2人のプレーヤーが接続されたときに作成されます。このようなことは可能でしょうか? – Masiar

+0

あなたは何か他のことをすることができ、すべてのユーザーが自分のチャンネルに接続できるようにします。たとえば "Alex"が "Jim"にメッセージを送信すると、 "Jim"は "Jim"チャンネルを聴いているのでそのメッセージを受信し、その逆も同様です。 – alessioalex

関連する問題