web-dev-qa-db-ja.com

Socket.IOミドルウェア、io.use

ExpressJSとSocket.ioに基づいて構築されたWebアプリケーションの作業。 次の投稿 では、初めてのミドルウェア構文の使用法を確認しました。次に構文の例を示します。

_const io = require('socket.io')();

io.use(function(socket, next) {
  // execute some code
  next();
})
.on('connection', function(socket) {
    // Connection now authenticated to receive further events

    socket.on('message', function(message) {
        io.emit('message', message);
    });
});
_

基本的には、_socket.io_インスタンスでミドルウェア関数を使用します。私の以前の理解では、middlwareはExpressインスタンス(app.use(...))でのみ使用できるということでした。

質問:

  1. この構文は、app.use(...)と同様に機能する通常のミドルウェアですか?
  2. それが異なる場合、違いは何ですか?
7

io.use()を使用すると、新しく着信するすべてのsocket.io接続に対して呼び出される関数を指定できます。次のような幅広い用途に使用できます。

  1. ロギング
  2. 認証
  3. セッションの管理
  4. レート制限
  5. 接続検証

等々...

その目的はExpressミドルウェア(app.use()のような)に似ていますが、これは受信のsocket.io接続用であり、Expressが管理する通常のhttp要求の受信用ではありません。ミドルウェアで着信httpリクエストを処理する場合は、app.use()でExpressミドルウェアを使用します。ミドルウェアで着信socket.io接続を処理する場合は、socket.ioミドルウェアをio.use()とともに使用します。

13
jfriend00