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

服务器端:

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);

最佳答案

在触发socket.id事件后更改connection可能为时已晚,因为在这一点上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);
  });

});

关于javascript - 我的私有(private)消息不适用于socket.io,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44174099/

10-12 12:20
查看更多