Javascript Socket.io向特定套接字发出消息(体系结构)

Javascript Socket.io向特定套接字发出消息(体系结构),javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我有一个应用程序,其中用户有一个带有软木板的配置文件 当用户在其他用户配置文件上写入内容时,该配置文件页面上的每个人都应收到发送 在客户端,我连接到套接字服务器,如下所示: window.onload = function() { var socket = io.connect("https://10.94.30.134:8080"); // ... }; 请注意,client.js在每次访问my profile.html时都会加载和连接。我无法想象这是一个好办法 在服务器

我有一个应用程序,其中用户有一个带有软木板的配置文件

当用户在其他用户配置文件上写入内容时,该配置文件页面上的每个人都应收到发送


在客户端,我连接到套接字服务器,如下所示:

window.onload = function() {
    var socket = io.connect("https://10.94.30.134:8080");
    // ...
};
请注意,client.js在每次访问my profile.html时都会加载和连接。我无法想象这是一个好办法


在服务器端,我使用
rooms
确定用户当前所在的配置文件页面

sio.on("connection", function(socket){
    socket.join(socket.handshake.session.last_visited_profile);
    // ...
    socket.on("send-corkboard-message", function(data) { // ...
    socket.on("send-chat-message", function(data) { // ...  
});
目前的方法是可行的,但我认为还有很多地方需要改进。我在用我的移动设备测试这个设置时也遇到了问题。连接到套接字服务器大约需要5-10秒。(这就是为什么我认为将套接字连接存储在客户端的某个全局位置会更好。)如果是这样,我没有机会让套接字在连接时加入房间,我宁愿在我的路由或客户端内通过类似订阅事件的方式来做这件事

将所有socket.io事件(
“发送corkboard消息”、“发送聊天消息”
)都包含在
连接中是否是一种好方法


也许您可以帮助我或将我链接到一些socket.io架构,以改善我目前的状况。提前谢谢

无法在客户端存储套接字连接。服务器是连接的维护者,同时也处理心跳和房间。至于第二个问题,问题不在于事件是否应该在
连接处理程序中,而在于必须将它们放在该处理程序中

例如,如果我们有一个处理程序:

io.sockets.on('connection', function(socket) {
  socket.emit('event', data);
});
socket
对象在处理程序中在线定义。因此,您不能将事件附加到它之外

至于您的体系结构,您应该避免向不需要数据的客户端发送数据。因此,如果您有一整组客户机,它们需要或不需要特定数据,则可以创建房间,并让客户机在connect上订阅特定房间:

io.sockets.on('connection', function(socket) {
  socket.on('subscribe', function(room) {
    socket.join(room);
  });
  socket.on('unsubscribe', function(room) {
    socket.leave(room);
  });
});
然后在客户端:

var socket = io.connect('/');
socket.emit('subscribe', 'room1');

还要注意的是,创建Socket.IO连接不需要等待DOM加载。所以您不需要
window.onload=function(){},这可能会加快连接的建立。

谢谢!不管怎样,当我在每个站点请求的连接处理程序中结束时,我也可以在服务器上的连接处理程序中“订阅”,就像我在上面的帖子中所描述的那样?这是一个问题还是陈述?我想听听你的意见,是的。我真的不知道你的应用程序可能是如何构造的,但是是的,避免向不需要数据的客户端发送数据。