[socket.io] The Socket instance (server-side)


本文
The Socket instance (server-side)
その他:
  • イベント送受信
  • 放送活動
  • 部屋参加と退出
  • Socketインスタンスには、いくつかのプロパティがあります.
    Socket#id
    各新しい接続には、任意の20文字の識別子が割り当てられています.
    この識別子は、クライアントの値と同期します.
    // server-side
    io.on("connection", (socket) => {
      console.log(socket.id); // ojIckSD2jqNzOqIrAGzL
    });
    
    // client-side
    socket.on("connect", () => {
      console.log(socket.id); // ojIckSD2jqNzOqIrAGzL
    });
    作成時、コンセントはIDで識別された部屋に参加します.つまり、個人情報に使用できます.
    io.on("connection", socket => {
      socket.on("private message", (anotherSocketId, msg) => {
        socket.to(anotherSocketId).emit("private message", socket.id, msg);
      });
    });
    注:この識別子はSocketです.IOコードベースの複数の部分で使用されているため、上書きできません.
    Socket#handshake
    このオブジェクトはSocketです.IOセッションの開始時に発生した握手の詳細が含まれています.
    {
      headers: /* the headers of the initial request */
      query: /* the query params of the initial request */
      auth: /* the authentication payload */
      time: /* the date of creation (as string) */
      issued: /* the date of creation (unix timestamp) */
      url: /* the request URL string */
      address: /* the ip of the client */
      xdomain: /* whether the connection is cross-domain */
      secure: /* whether the connection is secure */
    }
    Socket#rooms
    コンセントは現在の部屋を参照します.
    io.on("connection", (socket) => {
      console.log(socket.rooms); // Set { <socket.id> }
      socket.join("room1");
      console.log(socket.rooms); // Set { <socket.id>, "room1" }
    });
    Additional attributes
    既存のアトリビュートを上書きしない限り、すべてのアトリビュートをSocketインスタンスに接続して後で使用できます.
    // in a middleware
    io.use(async (socket, next) => {
      try {
        const user = await fetchUser(socket);
        socket.user = user;
      } catch (e) {
        next(new Error("unknown user"));
      }
    });
    
    io.on("connection", (socket) => {
      console.log(socket.user);
    
      // in a listener
      socket.on("set username", (username) => {
        socket.username = username;
      });
    });
    Events
  • disconnect
  • このイベントは、接続解除時にSocketインスタンスによって開始されます.
    io.on("connection", (socket) => {
      socket.on("disconnect", (reason) => {
        // ...
      });
    });
  • disconnecting
  • このイベントはdisconnectに似ていますが、socket#romess setがまだ空でない場合は、より早く開始されます.
    io.on("connection", (socket) => {
      socket.on("disconnecting", (reason) => {
        for (const room of socket.rooms) {
          if (room !== socket.id) {
            socket.to(room).emit("user has left", socket.id);
          }
        }
      });
    });
    注意:connectconnect_errornewListener、およびremoveListenerは、アプリケーションが使用すべきでない特別なイベントです.
    // BAD, will throw an error
    socket.emit("disconnect");