2017-05-25 46 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