2017-05-25 45 views
0

我不明白为什么我的代码(下)不起作用。在发送到套接字之前,console.log将在服务器端上打印正确的socket.id。那么为什么不收到消息?我的私人消息不能用于socket.io

服务器端:

socket.on("connectToUser", function(userName, currentUserName, userID){ 
     console.log("user wants to connect to: ",userID); 
     socket.to(userID).emit("connectNotification", currentUserName); 
    }); 

客户端:

socket.on("connectNotification", function(currentUserName){ 
     console.log("correct user notified"); 
     $("#connectToBox").append("Hallo"); 
    }); 

是否socket.id已是原来的一个?我改变它的连接,就像这样:

socket.on('connection', function(socket){ 
 
    console.log('a user connected', socket.id); 
 
    var id = uuid.v4(); 
 
    socket.id = id; 
 
    console.log(socket.id);

+1

我想是的,它应该是原来的,不要使用'uuid.v4()'来操纵它,只是使用从你的套接字返回的东西,看看它是否工作 –

+0

让我们看看你是如何创建套接字变种!我认为你应该包括更多关于你的代码,因为这不足以理解错误。 – Luillyfe

+0

首先你需要检查你的客户端是否与你的服务器连接正常 客户端:新io.connect(“http:// localhost:3000你的app url”); –

回答

1

connection事件后更改socket.id已经解雇时可能为时已晚,因为在这一点上,socket.io已经做了一些内部处理基于原始的ID。

如果你想使用自己的id,你应该使用一个middleware function代替(免责声明:我不是太熟悉的socket.io的内部,但一些示例代码,我放在一起似乎工作):

let server = require('socket.io')(...); 

server.use(function(socket, next) { 
    socket.id = uuid.v4(); 
    next(); 
}).on('connection', function(socket) { 

    socket.on("connectToUser", function(userName, currentUserName, userID){ 
    console.log("user wants to connect to: ",userID); 
    socket.to(userID).emit("connectNotification", currentUserName); 
    }); 

}); 
+0

实际上结束了使用连接时传递给客户端的原始ID。完美的作品! – JonasSH