如何防止 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').