同じテーマでいくつかの質問があり、テーマはどれも私のために働いていませんでした。私はその過程で何かが欠けていると思う:ソケットは特定のユーザーに送信します
私は特定のユーザーにメッセージを送信したい。 私が使用:
サーバー(あなたが見ることができるように、私はセッションを処理するためにマングースを使用):その後、
const io = new SocketIo(server);
io.use(socketioJwt.authorize({
secret: configSocket.secret,
handshake: true
}));
// persistence store of our session
const MongoStore = mongoStoreFactory(session);
const sessionMiddleware = session({
store: new MongoStore({
mongooseConnection: mongoose.connection,
ttl: (1 * 60 * 60) // 1 hour
}),
secret: configSocket.secretSession,
httpOnly: true,
resave: false,
saveUninitialized: false,
// rolling: true,
// secure: true,
cookie: { maxAge: 86400000 }
});
app.use(sessionMiddleware);
...
socketRouter(io);
socketRouter機能
"express": "^4.13.3"
"socket.io": "^1.3.7"
"socket.io-client": "^1.3.7"
"mongodb": "^2.2.2"
"mongoose": "^4.5.4"
は、ここに私のコードです。私はmongo dataStoreでユーザープロフィールのsocketIdを保存して、emitでユーザーを狙っています。
exports = module.exports = (io) => {
io.sockets.on('connection', (socket) => {
Users.findById(socket.decoded_token.sub, (err, user) => {
if (user) {
// if the user exists, save the socket Id in the user collection
Users.update({_id: user._id}, {$set: {socketId: socket.id}}, (err2, result) => {
// ------ PROTECTED ROUTES ------ //
// MOBILE CALLS
...
// DASHBOARD CALLS
socket.on('forceNotif', (data) => Notif.force(data, io, socket));
// ------------------------------ //
});
}
});
socket.on('disconnect',()=> {
Users.update({_id: socket.decoded_token.sub}, {$set: {socketId: null}});
});
});
「forceNotif」によって呼び出される関数。ここで私は別の動作を期待しています。私はソケットが特定のユーザー(要求を送信するものとは異なる)に値を送信するようにします。私はMongoDbからsocketIdを取得しますが、それは正確です。それから私は私の目的のためにそれを使いたい。いくつかの異なる命題がウェブ上で作られている。私は以下のことをテストした:
exports.force = (par, io, socket) => {
// retrieve the socket id of the user to aim
Users.findOne({_id: par.id}, {socketId: 1, pseudo: 1}, (err, res) => {
console.log('--------------------------------------------------');
console.log('err: ', err);
console.log('pseudo: ', res.pseudo);
console.log('socketId: ', res.socketId);
// emit the value to a specific user
// not working
io.sockets.to(res.socket).emit('notifExtUpdate', {val: 'TO'});
io.to(res.socket).emit('notifExtUpdate', {val: 'TO'});
io.broadcast.to(res.socket).emit('notifExtUpdate', {val: 'TO'});
socket.broadcast.to(res.socket).emit('notifExtUpdate', {val: 'TO'});
socket.to(res.socket).emit('notifExtUpdate', {val: 'TO'});
// working well, but not my purpose
io.emit('notifExtUpdate', {val: 'BROADCAST'});
socket.broadcast.emit('notifExtUpdate', {val: 'BROADCAST'});
});
};
私は誰かが