节点js中的套接字连接

socket connection in node js

我刚开始在 node 上工作 js.I 一直在尝试使用 node js 制作聊天应用程序。其中单个用户可以通过多个设备或浏览器登录。如果我没记错的话,并且据我所知,每个浏览器都与不同的端口地址通信,因为套接字连接是由 IP 地址和端口地址定义的,因此当同一用户从两个不同的浏览器登录时,服务器会创建两个不同的套接字 Id.Now我通过检查发送到套接字 info.Then 的参数来验证用户是否已经连接,如果用户已经连接或者套接字已经为用户设置,那么我创建连接以将套接字 ID 更改为以前的套接字 ID as 。

io.on('connection', function(socket){
 socket.id = k;
});

其中 k 是先前连接的同一用户的套接字 ID

现在,当任何其他客户端向当前用户发送消息时,套接字 ID 是否会被替换,并且只有一个浏览器收到消息或两个浏览器都收到消息。服务器的连接是为两个浏览器还是单个浏览器设置的。请帮助我。我仍然不清楚客户端和服务器之间如何建立套接字连接。 如果我做错了任何假设,请改进或者我如何解决以下场景。 提前致谢

我对 Sockets(和 JS)也很陌生,我也在尝试制作一个聊天应用程序,但有点不同。

据我所知,该消息只能在一个浏览器上接收。更好的设计是让用户通过多个 browsers/devices 进行连接。您可以维护用户已连接的所有套接字的列表(如果需要)。

如果您需要一对一聊天,也许您可​​以编写一些代码,将两个用户连接的所有套接字连接到一个房间中。

socket.room = roomname
socket.join(roomname)

然后你就把消息广播到那个房间。这样两个用户连接到的每个套接字都会收到消息。

socket.to(socket.room).broadcast.emit("message", message);

(我把房间信息保存在socket里,不知道这样设计好不好)

希望对您有所帮助!

如果我对你的问题理解正确,让我试着用我的方式解释一下。假设您有以下服务器代码:

    var io = require('socket.io')(somePort); //same port for the client to connect, e.g. 3000
    io.on('connection', function(socket){
     // in here you should define any actions on your primary socket
     // for example:
       socket.on("hello", function(dataUserSendsWithTopicHello){// overly long variable name to show my point! :)
         // do something with hello data
       });

     // this will go to anyone who is connected and has a handler like above for "hello"
      socket.emit("hello", "hello to all who listen to hello topic"); 
    });

对应的客户端是:

  var socket = io.connect('ip:port'); // e.g. localhost:3000 - same ip and port as above

  socket.on('hello', function(serverResponseToHello){
    // do something when server sends back something on hello 
  });

 // send a hello to the server
  socket.emit("hello", "Sending hello to server");

现在,如果您只想回复 一个 用户,或者 的人一起查看某些消息,例如聊天,您可以利用 socket.io 的房间/命名空间实现(http://socket.io/docs/rooms-and-namespaces/) and create one room for each client, or one room for a group of clients. For this, take a look at this answer:

总结起来就是一个ip,一个端口。每个人都监听这个 ip 和端口,如果你打开三个选项卡并且你有一些类似于上面的实现,所有选项卡都将监听 "hello"。使用房间,您可以对用户进行分组并隔离通信,以便只有正确的用户而不是所有用户之间进行通信。

祝你好运!