节点js中的套接字连接

萨加尔·沙潘

我刚刚开始研究Node js,我一直在尝试使用Node JS制作聊天应用程序。一个用户可以在其中通过多个设备或浏览器登录。如果我没看错,并且据我了解,每个浏览器都使用不同的端口地址进行通信,因为套接字连接由IP地址和端口地址定义,因此当同一用户从两个不同的浏览器登录时,服务器将创建两个不同的套接字ID。如果通过检查发送到套接字信息的参数已连接用户,则如果用户已连接或已为该用户设置了套接字,则我将创建连接以将套接字ID更改为以前的套接字ID。

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

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

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

姆卡兰

如果我正确理解了您的问题,请尝试用我的方式进行解释。假设您具有服务器的以下代码:

    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的room /名称空间实现(http://socket.io/docs/rooms -and-namespaces /),并为每个客户端创建一个房间,或为一组客户端创建一个房间。为此,请看一下以下答案:将Socket.io与多个连接到同一服务器的客户端一起使用

总结起来,有一个IP和一个端口。每个人都收听此ip和port,如果您打开三个选项卡,并且具有上述类似的实现,则所有选项卡都将收听“ hello”。使用会议室,您可以将用户分组并隔离通信,以便只有在正确的用户之间(而不是全部)之间进行通信的用户。

祝你好运!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章