Javascript 节点js中的套接字连接

Javascript 节点js中的套接字连接,javascript,node.js,sockets,port,Javascript,Node.js,Sockets,Port,我刚刚开始使用node js。我一直在尝试使用node js制作聊天应用程序。其中单个用户可以通过多个设备或浏览器登录。如果我没有错,并且据我所知,每个浏览器都与不同的端口地址通信,因为套接字连接由IP地址和端口地址定义,因此当同一用户从两个不同的浏览器登录时,服务器会创建两个不同的套接字Id。现在,我通过检查参数send to来验证用户是否已经连接套接字信息。然后,如果用户已连接或已为用户设置套接字,则我创建连接以将套接字id更改为以前的套接字id io.on('connection', fu

我刚刚开始使用node js。我一直在尝试使用node js制作聊天应用程序。其中单个用户可以通过多个设备或浏览器登录。如果我没有错,并且据我所知,每个浏览器都与不同的端口地址通信,因为套接字连接由IP地址和端口地址定义,因此当同一用户从两个不同的浏览器登录时,服务器会创建两个不同的套接字Id。现在,我通过检查参数send to来验证用户是否已经连接套接字信息。然后,如果用户已连接或已为用户设置套接字,则我创建连接以将套接字id更改为以前的套接字id

io.on('connection', function(socket){
 socket.id = k;
});
其中k是先前连接的同一用户的套接字id

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

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

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

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

socket.room = roomname
socket.join(roomname)
然后你就把信息广播到那个房间。这样,两个用户连接到的每个套接字都会收到消息

socket.to(socket.room).broadcast.emit("message", message);
(我正在将房间信息保存在插座中,不知道这是否是一个好的设计)


希望这有帮助

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

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

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

socket.room = roomname
socket.join(roomname)
然后你就把信息广播到那个房间。这样,两个用户连接到的每个套接字都会收到消息

socket.to(socket.room).broadcast.emit("message", message);
(我正在将房间信息保存在插座中,不知道这是否是一个好的设计)


希望这有帮助

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

    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/namespace实现()为每个客户机创建一个room,或者为一组客户机创建一个room。为此,请看以下答案:

总之,有一个ip和一个端口。每个人都会监听这个ip和端口,如果您打开三个选项卡,并且您有类似于上述的一些实现,那么所有选项卡都会监听“hello”。通过使用聊天室,您可以对用户进行分组并隔离通信,以便只有正确的用户才能在正确的用户之间进行通信,而不是所有用户之间进行通信


祝你好运

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

    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/namespace实现()为每个客户机创建一个room,或者为一组客户机创建一个room。为此,请看以下答案:

总之,有一个ip和一个端口。每个人都会监听这个ip和端口,如果您打开三个选项卡,并且您有类似于上述的一些实现,那么所有选项卡都会监听“hello”。通过使用聊天室,您可以对用户进行分组并隔离通信,以便只有正确的用户才能在正确的用户之间进行通信,而不是所有用户之间进行通信


祝你好运

我的问题是针对不同的浏览器或计算机。当用户从多台计算机或可能是不同的浏览器登录时会发生什么情况。不同的浏览器或不同的计算机(当您没有房间/命名空间实现时)将与具有多个选项卡相同。套接字将打开,比如说
someIp:somePort
,例如
98.45.32.21:3000
,这不会改变,因此,当一个人发送“hello”时,服务器将向每个人发送hello(在上述实现中)。如果你想让用户从两个不同的浏览器登录并看到相同的消息,但只看到他的消息,然后,您应该将该用户与正确的房间关联起来,以便当他从第二个浏览器连接时,您知道该用户是user
sagar
,您将在正确的文件室中加入他。我的问题是针对不同的浏览器或计算机。当用户从多台计算机或可能是不同的浏览器登录时会发生什么情况。不同的浏览器或不同的计算机(当您没有文件室/命名空间实现时)将与具有多个选项卡相同。套接字将打开,比如说
someIp:somePort
,例如
98.45.32.21:3000
,这不会改变,因此,当一个人发送“hello”时,服务器将向每个人发送hello(在上述实现中)。如果你想让用户从两个不同的浏览器登录并看到相同的消息,但只看到他的消息,然后,您应该将该用户与正确的房间关联起来,以便当他从第二次浏览连接时