gpt4 book ai didi

javascript - 我如何使用 socket.io 发送给单个客户端(而不是每个人)

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:56:59 25 4
gpt4 key购买 nike

梳理文档但没有成功。我试图发送给单个客户/用户,而不是每个人。

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

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

服务器:

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com