节点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"。使用房间,您可以对用户进行分组并隔离通信,以便只有正确的用户而不是所有用户之间进行通信。
祝你好运!
我刚开始在 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"。使用房间,您可以对用户进行分组并隔离通信,以便只有正确的用户而不是所有用户之间进行通信。
祝你好运!