javascript - 我怎样才能使用socket.io(而不是每个人)向单个客户端发出信号

标签 javascript socket.io

梳理文档但没有运气。我试图向单个客户/用户而不是所有人发送。

我阅读了有关此问题的其他几个问题,大多数都没有答案或指向旧的解决方案。任何帮助将不胜感激。

以下内容有效,但会发送给网站上的每个人,而不是单个用户......

服务器:

//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()

如果您确实需要发送到单个套接字,则需要更多工作:

  1. 使用socket.io's rooms or namespace .
  2. 获取target socket's id .
  3. 使用套接字 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/

相关文章:

html - node.js、socket.io - 网站架构

javascript - Socket.io-知道哪个房间的 socket 在哪

javascript - sails.js - 需要来自同一浏览器的多个 session

node.js - Windows 7 32 位上的 Socket.io 安装失败

javascript - 编写多维数组 jQuery

javascript - io.connect('http ://localhost:4000) mean? 是什么

javascript - 制表器中的日期时间选择器?

javascript - 我正在使用 Geckofx-22,没有页眉和页脚就无法打印

javascript - Vue列表排序后不重新渲染 "properly"

javascript - 从 Object.keys 获取返回值