javascript - Socket.io 向特定用户发出
问题描述
我有两个客户端:客户端 1 和客户端 2。客户端 1 专门向客户端 2 发送消息,而不向其余客户端广播消息。
来自客户 1:
var socket = io();
socket.on("connect", () => {
button.addEventListener("click", function() {
socket.emit("send", {room, message, client1_id, client2_id});
})
})
客户端 2 首先将其 socket.io 会话 id 发送到后端,并等待后端发送给客户端 2:
var socket = io();
socket.on("connect", () => {
socket.emit("send_id", (socket.io.engine.id))
socket.on(client2_id, (data) => {
console.log(data);
})
})
Node.js 后端:
var tech = io.of("/");
tech.on("connection", (socket) => {
var receiver_id;
socket.on("send_id", (data) => {
receiver_id = data;
})
socket.on("send", data => {
io.to(receiver_id).emit(data.client2_id, "hello");
})
})
最后Client 2没有console.log,如果我同时加载Client 1和2,然后点击按钮。
有人可以告诉我这里出了什么问题吗?
谢谢你的帮助。
解决方案
当Client 1 发送emit 事件时,该事件将由thread
Client1 处理。
这意味着,在 line 中io.to(receiver_id).emit(data.client2_id, "hello");
,有receiver_id
Client1 的套接字的 id。
receiver_id
变量不是必需的,因为您在data
.
尝试使用我的代码段:
io.to(data.client2_id).emit(data.client2_id, "hello"); // I think it will be better if you change event name to `direct-message` instead of `data.client2_id`
推荐阅读
- pygame - Pygame,无法让我的表面显示在显示器上
- azure - 如何在 Azure 表存储中对多对多关系进行建模并保持表之间的数据一致性?
- r - 是否有一个 R 函数来查找所有子函数
- python - 忽略两位数的最大函数
- javascript - 使用 `req.body` 作为 mongoose findOneAndUpdate,而不影响任何不在 req.body 内的值/字段
- docker - 无法连接到 gunicorn
- python - 使用请求从 Zomato 餐厅提取评论
- clickhouse - 在 ClickHouse 中的表上查看
- python - 将图像数据转换为无符号整数类型以与 OpenCV 一起使用时出现问题
- ionic5 - 如何在ionic 5中使用contact.pickContact选择联系人