0

私はnode.jsとsocket.ioが初めてです。socket.io サイト ( http://socket.io/#how-to-use ) のサンプル コードが実行されているテスト サーバーを用意しました。

次のことをどこから始めればよいかわかりません

  • 「page1」にサーフィンし、ノードに私がuser1であることを知らせます
  • 「page2」にサーフィンし、ノードに私がuser2であることを知らせます
  • たとえば、user1 と user2 の単語をそれぞれ "page1" と "page2" のどこかに入力し、user1 と user2 のすべての単語を両方のページに表示します。

node.jsアプリのサーバー側である「ハンドラー」関数で何らかのルーティングを作成する必要があると思いますが、それが正しい方法であるかどうかはわかりません。

誰かが私を正しい方向に向けるのを手伝ってくれますか?

4

1 に答える 1

0

Socket.io を使用すると、これが非常に簡単になります。名前空間と部屋があります。たとえば、2 つの異なる名前空間を作成するには、次のようにします。

var io = require('socket.io').listen(app, {origins: '*:*', log: false});

var page1 = io.of('/page1').on('connection', function (socket) {
  //you can use socket in here
});

var page2 = io.of('/page2').on('connection', function (socket) {
  //you can use socket in here
});

これで、2 つの名前空間ができました。それぞれの内部で、イベントをリッスンできます。たとえば、type イベントを送信した場合:

socket.on('type', function(text){
  io.sockets.emit('type', {'whatWasTyped': text]);
}

これにより、接続されているすべてのクライアントにタイプ イベントが送信されます。

名前空間をさらに分離したい場合は、ルームを作成できます。名前空間にルームを作成する方法は次のとおりです。

var page1 = io.of('/page1').on('connection', function (socket) {
  socket.on('add', function(area){
    socket.join(area);
  };
});

参加したいルームに接続するたびに、追加イベントを送信する必要があります。その後、その部屋にのみメッセージを送信できます。

io.of('/users').in(area).emit('event', {'event': yourInfoHere});

次のコマンドを実行すると、接続に関する情報を取得できます。

socket.get('user', function(err, info){ //in here });

これは、socket.io wiki: https://github.com/LearnBoost/socket.io/wiki/Roomsからの、頭のてっぺんからの情報でした。

私はそれをテストしていません。他にいくつか質問がある場合はお知らせください。

于 2013-01-21T21:07:14.547 に答える