1

Node.jsの公式チャットの例から始めます。
ユーザーは、「register」(client.html)を介してサーバーに自分の名前を送信するように求められます。

            while (name == '') {
               name = prompt("What's your name?","");
            }                
            socket.emit('register', name );

サーバーは名前を受け取ります。ソケットの識別子として名前を付けてほしい。そのため、そのユーザーにメッセージを送信する必要がある場合は、そのユーザーの名前を持つソケットにメッセージを送信します(名前は情報のためにデータベースに保存されます)。
ここで変更が行われます(server.js):

  socket.on('register', function (name) {
      socket.set('nickname', name, function () {         
         // this kind of emit will send to all! :D
         io.sockets.emit('chat', {
            msg : "naay nag apil2! si " + name + '!', 
            msgr : "mr. server"
         });
      });
   });

ソケットを特定できないと、これ以上先に進むことができないため、これを機能させるのに苦労しています。だからどんな助けでも本当にありがたいです。
更新:ニックネームがソケットのパラメーターであることを理解しているので、質問はより具体的には、「Kyle」をニックネームとして持つソケットを取得してメッセージを送信する方法を教えてください。

4

1 に答える 1

3

ソケットは次のような構造で保管してください。

var allSockets = {

  // A storage object to hold the sockets
  sockets: {},

  // Adds a socket to the storage object so it can be located by name
  addSocket: function(socket, name) {
    this.sockets[name] = socket;
  },

  // Removes a socket from the storage object based on its name
  removeSocket: function(name) {
    if (this.sockets[name] !== undefined) {
      this.sockets[name] = null;
      delete this.sockets[name];
    }
  },

  // Returns a socket from the storage object based on its name
  // Throws an exception if the name is not valid
  getSocketByName: function(name) {
    if (this.sockets[name] !== undefined) {
      return this.sockets[name];
    } else {
      throw new Error("A socket with the name '"+name+"' does not exist");
    }
  }

};
于 2012-08-18T10:55:39.200 に答える