我在使用 socket.io 时遇到问题。我设置了一个功能,在连接时,用户数据会刷新,只是它似乎只在初始连接后发生。
当一个用户连接时,新用户上不会刷新任何内容。其他新用户连接,旧连接刷新,但新连接保持不变。
连接期间我无法发送数据吗?
这对我来说只是一些简单的练习,试图更好地使用 websockets,并且似乎无法超越一般的broadcast.emit。
当然,我尝试过socket.to(socket.id).broadcast.emit,但是也没有运气。您将在我的代码中看到。
// Setup socket.io
socketIo.on('connection', socket => {
getDataByUser(user, socket)
socket.on('disconnect', function() {
delete CLIENTS[socket.id];
console.log(`${username} disconnected`)
});
function getDataByUser(user, socket) {
var items = [1,2,3];
items.forEach(element => {
socket.broadcast.emit('server:data', element)
socket.broadcast.to(socket.id).emit('data', 'for your eyes only');
});
}
正如您在 getData 函数中看到的,我使用了常规发出和发出到来测试它。我设置了正确的监听器,但是套接字本身仅在新连接时刷新。也许只有当套接字 a 建立新连接时才会调用?
我想在套接字连接上立即调用此函数。仅适用于已连接的用户。任何帮助将不胜感激。
最佳答案
我认为解决这个问题的方法是不广播它。 尝试仅向当时连接的套接字发送。 我没有得到您想要实现的目标,因此如果下面的代码不能解决您的问题,请说出您期望的输出。
socketIo.on('connection', socket => {
var items = [1,2,3];
items.forEach(element => {
socket.emit('server:data', element)
socket.emit('data', 'for your eyes only');
});
socket.on('disconnect', function() {
socket.disconnect();
console.log(`${username} disconnected`)
});
当您使用套接字对象时,您仅寻址到该客户端...建立连接的那个客户端。
关于javascript - 如何让 Socket 只发送给发出请求的客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55585074/