2016-09-27 124 views
0

我刚开始工作节点js.I一直在尝试使用节点js创建聊天应用程序。其中一个用户可以通过多个设备或浏览器登录。如果我没有错,并且据我了解每个浏览器与不同的端口地址通信,因为套接字连接是由IP地址和端口地址定义的,因此当同一用户从两个不同的浏览器登录时,服务器会创建两个不同的套接字Id.Now如果用户已通过检查发送到套接字信息的参数连接。那么如果用户已连接或套接字已为用户设置,那么我创建连接以将套接字标识更改为之前套接字标识为。节点js中的套接字连接

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

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

当任何其他客户端发出消息,那么当前用户是插座ID替换和仅一个浏览器获得的消息或二者获取消息。服务器的连接是为浏览器还是单个浏览器设置的。请帮助我。我仍然不清楚在客户端和服务器之间如何建立套接字连接。 如果我错误地做了任何假设,请改善或者我如何解决下面的情况。 在此先感谢

回答

2

如果我正确理解你的问题,让我尝试用我的方式解释。比方说你有服务器的下面的代码:

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/)并为每个客户端创建一个空间,或为一组客户端创建一个空间。为此,看看这个答案:Using Socket.io with multiple clients connecting to same server

总结起来,有一个ip和一个端口。每个人都听这个IP和端口,如果你打开三个标签,并且你有一些像上面这样的实现,所有标签都会听到“你好”。使用房间,您可以将用户分组并隔离通信,以便只有在正确用户和不是全部用户之间进行通信的用户。

祝你好运!

+0

我的问题恰恰是针对不同的浏览器或计算机。当用户从多台计算机登录或可能是不同的浏览器时会发生什么情况。 –

+0

不同的浏览器或不同的计算机(当你没有房间/名称空间的实现)将会有相同的许多选项卡。插座可以让我们说'someIp:somePort'例如'98.45.32.21:3000',不会改变,所以,当发送“hello”的服务器会用hello(在上面的实现中)回复所有人。 – mkaran

+0

如果您希望用户从两个不同的浏览器登录并看到相同的消息 - 但只有他的消息,那么您应该将该用户与正确的房间相关联,以便当他从另一个浏览器连接并且您知道它是用户sagar',你会和他一起进入正确的房间。 – mkaran

0

我也是相当新的套接字(和JS),我试图做一个聊天应用程序,但有点不同。

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

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

socket.room = roomname 
socket.join(roomname) 

然后你只是把消息广播到那个房间。这样,两个用户都连接到的每个套接字都将获得该消息。

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

(我保存在插座上的房间信息,不知道如果这是一个很好的设计)

希望这有助于!