ソケットをクライアントから接続するときには、ユーザーIDとソケットを渡す必要があります。そのIDをキャッチしてそのユーザーのソケットを識別する必要があります。ここ
const socket = io();
io('/', { query: "id=user id here" });
サーバー側のコード:
var connectedUsers = {};
var io = socket.listen(server);
io.on('connection', function(socket){
var userId = socket.handshake.query['id'];
var connectedUser = {id:userId, socket:socket}
// every socket connection will have unique socket.id which we use to store in socket and identify if disconnected.
connectedUsers[socket.id] = connectedUse
socket.on('disconnect', function() {
for(var i in connectedUsers)
if(connectedUsers[i].socket.id === socket.id){
delete connectedUsers[i];
}
});
});
今すぐあなたのポストの要求に使用すると、同じIDでユーザーを識別し、ユーザーのために、それぞれのソケットを取得する必要があります。
app.post('/request', function(req, res) {
var userId = 'write your code to get user id';
if(connectedUsers[userId])
connectedUsers[userId].socket.emit('message', {});
else
console.log('User not online');
res.end();
});
注:これは、ユーザーIDの取得を正しく処理するまでは機能しません。
ログイン後のみユーザーを識別できる場合は、ユーザーログイン用のソケットイベントを作成し、クライアントからサーバーにユーザーIDを送信し、ログインイベント内に「接続」コードを書き込む必要があります。
「HTTPリクエストが別のソケットを開く可能性があるので、これは1つのサーバにのみ適用されます。 '? – omega