梳理文档但没有运气。我试图向单个客户/用户而不是所有人发送。
我阅读了有关此问题的其他几个问题,大多数都没有答案或指向旧的解决方案。任何帮助将不胜感激。
以下内容有效,但会发送给网站上的每个人,而不是单个用户......
服务器:
//Socket.io
const http = require('http').Server(app);
const io = require('socket.io')(http);
app.post('/login', (req, res) => {
const email = cryptonize.encrypt(req.body.email);
const password = cryptonize.encrypt(req.body.password);
io.emit('login success', email, password);
});
客户:
const socket = io();
socket.on('login success', (user, token, auth) => {
console.log(`user:${user}, password:${password});
});
我已经尝试了 socket.io 备忘单中提到的“socket.emit”,但它在服务器上返回为未定义。可能我错过了一些非常简单的东西,只是没有看到它。
最佳答案
我认为这不是 socket.io 的预期用途。
就您而言,一个简单的 res.end(...)
就可以了(至少根据您向我们展示的内容)。
app.post('/login', (req, res) => {
const email = cryptonize.encrypt(req.body.email);
const password = cryptonize.encrypt(req.body.password);
res.end(/* data */);
});
阅读docs关于res.end()
。
如果您确实需要发送到单个套接字,则需要更多工作:
- 使用socket.io's rooms or namespace .
- 获取target socket's id .
- 使用套接字 ID 发出。
这是使用默认命名空间的示例:
服务器
const IO = require('socket.io');
const io = IO(server);
// Default namespace is '/'
const namespacedIO = io.of('/');
io.on('connection', socket => {
socket.on('send', data => {
const targetSocket = namespacedIO.connected[data.socketID];
targetSocket.emit('received', data.value);
});
});
客户端
const socket = io();
submit.addEventListener('click', function(){
socket.emit('send', {
socketID: socket.id, // IMPORTANT: to get the source socket ID
value: input.value
});
})
socket.on('received', function(data){
console.log(`Data "${data}" is received at server.'`);
});
关于javascript - 我怎样才能使用socket.io(而不是每个人)向单个客户端发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53999823/