如何防止 socket.io 为所有用户执行事件?
How to prevent socket.io executing an event for all users?
每当我在客户端按下一个按钮向服务器发送一个请求时,该按钮就会为所有连接的用户执行。我想让它只发送给当前用户。我有什么办法可以做到这一点吗?
client.js
handleForm = () => {
socket.emit("request-uid");
socket.on("uid", (uid) => {
socket.emit("validate-data", {
title: this.state.title,
price: this.state.price,
email: this.state.email,
description: this.state.description,
contact: this.state.contact,
tags: this.state.tags,
});
});
};
socket.on("refresh", () =>{
alert("test!");
});
server.js
io.on("connection", function (socket) {
console.log("user connected!");
socket.on("request-uid", () => {
io.emit("uid", crypto.randomBytes(4).toString("hex"));
});
socket.on("validate-data", (data) => {
io.to(socket.id).emit("refresh");
});
});
当我单击执行 handleForm()
功能的按钮时,它会向当前在站点上的每个用户发出套接字,无论他们是否按下按钮。
即使我在服务器端使用 io.to(socket.id)
,它也会将其发送给所有人,我猜这是因为“validate-data”是 运行,并且它发送了一个唯一的发送给所有用户的套接字。
我只想让它向按下按钮的用户发送请求。
io.emit('uid')
将 uid
事件发送到所有客户端套接字,然后在回调中每个客户端将自己的 validate-data
发送到服务器。把io.emit('uid')
改成socket.emit('uid')
也可以把io.to(socket.id).emit('refresh')
简化成socket.emit('refresh')
.
每当我在客户端按下一个按钮向服务器发送一个请求时,该按钮就会为所有连接的用户执行。我想让它只发送给当前用户。我有什么办法可以做到这一点吗?
client.js
handleForm = () => {
socket.emit("request-uid");
socket.on("uid", (uid) => {
socket.emit("validate-data", {
title: this.state.title,
price: this.state.price,
email: this.state.email,
description: this.state.description,
contact: this.state.contact,
tags: this.state.tags,
});
});
};
socket.on("refresh", () =>{
alert("test!");
});
server.js
io.on("connection", function (socket) {
console.log("user connected!");
socket.on("request-uid", () => {
io.emit("uid", crypto.randomBytes(4).toString("hex"));
});
socket.on("validate-data", (data) => {
io.to(socket.id).emit("refresh");
});
});
当我单击执行 handleForm()
功能的按钮时,它会向当前在站点上的每个用户发出套接字,无论他们是否按下按钮。
即使我在服务器端使用 io.to(socket.id)
,它也会将其发送给所有人,我猜这是因为“validate-data”是 运行,并且它发送了一个唯一的发送给所有用户的套接字。
我只想让它向按下按钮的用户发送请求。
io.emit('uid')
将 uid
事件发送到所有客户端套接字,然后在回调中每个客户端将自己的 validate-data
发送到服务器。把io.emit('uid')
改成socket.emit('uid')
也可以把io.to(socket.id).emit('refresh')
简化成socket.emit('refresh')
.