エクスプレスフレームワークでsocket.ioが切断を使用する場合のエラー報告の問題を解決する

今日、Express を使用してチャット ルームで他の関数を作成したとき、io.emit('disconnect') メソッドがエラーを報告したことがわかりました。エラー メッセージは次のとおりでした。

 throw new Error(`"${
      
      String(ev)}" is a reserved event name`);
            ^

Error: "disconnect" is a reserved event name
    at BroadcastOperator.emit (D:\expressframe\myexpressjsj\node_modules\socket.io\dist\broadcast-operator.js:159:19)
    at Namespace.emit (D:\expressframe\myexpressjsj\node_modules\socket.io\dist\namespace.js:307:73)
    at Server.<computed> [as emit] (D:\expressframe\myexpressjsj\node_modules\socket.io\dist\index.js:806:33)
    at Socket.<anonymous> (D:\expressframe\myexpressjsj\scoketio:19:16)
    at Socket.emit (node:events:390:28)
    at Socket.emitReserved (D:\expressframe\myexpressjsj\node_modules\socket.io\dist\typed-events.js:56:22)
    at Socket._onclose (D:\expressframe\myexpressjsj\node_modules\socket.io\dist\socket.js:561:14)
    at Client.onclose (D:\expressframe\myexpressjsj\node_modules\socket.io\dist\client.js:247:20)
    at Socket.emit (node:events:402:35)
    at Socket.onClose (D:\expressframe\myexpressjsj\node_modules\engine.io\build\socket.js:310:18)

これはどういう意味ですか? おそらく予約語が使用されていることを意味します。次に、エミットが切断を使用するときに最初のエラーが報告されることを確認します。ユーザーの終了情報をブロードキャストするためにフロントエンドで切断メソッドを定義したため、端末がモニターは切断を監視するため、バックグラウンドでメッセージを報告する必要があるだけでなく、 io.emit() メソッドを使用してそれぞれの切断メソッドをすべてのソケット ユーザーにトリガーしますが、実際にはエラーが報告されます。公式サイトを確認したところ、disconnect ではsocket.on を使用してバックグラウンドで監視できるが、emit では使用できないということなので、これは良い解決策だと思います。Emit を使用して切断メソッドをトリガーすることはできないため、フロントエンドでこのメソッドを定義するときは、disconnect という名前を変更するだけで済むため、ログアウトを意味する logout に変更してから、バックエンド、問題。
後部

socket.on('disconnect',function()
        {
    
    
            console.log(socket.userid+'已经退出聊天室');
            io.emit('logout',socket.userid)
        })

フロントエンド

this.socket.on('logout',function(userid)
        {
    
    
            console.log(userid+'退出聊天室!');
        })

問題ありません。以下に導入してください:
ここに画像の説明を挿入します
ブラウザ
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_51295863/article/details/131674975