io.emit()
とsocket.emit()
の違いを理解すると、接続されたすべてのクライアントにioが送信されますが、socket.emit()
は接続されたクライアントにのみ送信されます。Expressルートで「ソケット」(「io」ではなく)を使用する
私は
const io = require('./socket/index')(server);
app.use((req, res, next) => {
res.io = io;
next();
});
がどのように私は「ソケット」を添付することができます...あなたが応答にio
インスタンスをバインドして、あなたのルートハンドラでそれを使用することができ特急のパターンを見てきましたイベントを発生させるためのリクエスト/レスポンスオブジェクトのみ接続されたクライアントへ?
例えば:
app.use((req, res, next) => {
io.on('connection', (socket) => {
res.socket = socket;
});
next();
});
app.post('/upload', (req, res) => {
// emits only to the client in question
res.socket.emit('upload started');
})
ユーザーのソケットと同じユーザーからの要求との間には、関連付けを行う必要があります。通常、これはクッキーまたはセッションオブジェクトで行われ、どのソケットがどのエクスプレスセッションに関連しているかを知ることができます。あなたのためにこれを行ういくつかのパッケージがあります。着信するhttp要求をいくつかのuserIDまたはsessionIDに関連付ける方法が必要です。次に、socket.io接続を接続すると、着信したsocket.ioと同じuserIDまたはsessionIDを使用して接続できます.HTTPリクエストが到着したときに結果として得られるソケットを保存することができます。 – jfriend00
私は明示的なセッションではなく、JWTトークンを使用しています。ソケットIDをサーバレンダリングHTMLにダンプすることはできますか?そうすれば、ソケットIDを使って 'socket.emit()'を実行するにはどうしたらいいですか? – Himmel
socket.io接続が行われたときにJWTトークンが表示されますか?あなたのJWTトークンコードは表示されませんので、実際にどのようにして作業しているかについてはほとんど言えません。 – jfriend00