ios - 使用 socket.io v1.3.x 将单个用户的请求发送到一组预定义用户

标签 ios node.js sockets express socket.io

这是我想要使用最新版本的 Socket.io 即 1.3.7 实现的目标

登录的成员用户可以向一组预定义的管理员用户广播相同的信息。单个管理员用户可以接收来自一组特定成员用户的响应。一切都是实时的。

例如,来自纽约的用户只想向同样来自纽约的管理员发送实时请求。在管理面板上,来自纽约的管理员只会收到来自纽约用户的请求。该用户不知道来自纽约的另一位用户连接到同一个房间。

Socket.io +1.0提供了命名空间和创建房间的功能,我认为上述功能可以通过创建房间来实现。但我在思考如何利用房间来满足这样的要求时遇到了问题。

到目前为止我的猜测是,需要根据地点名称动态创建一个房间,即纽约;

var room = 'new york' // string coming from client
socket.join(room);

纽约用户和管理员都将连接到该房间。但是,问题是管理员只能看到用户的请求,而看不到其他管理员的请求,就像用户无法查看来自纽约的其他用户的请求一样。

这个系统可以使用房间来实现吗,或者还有其他方法吗?

最佳答案

我建议一个不同的解决方案: 当用户连接时,会出现如下内容:

io.on('connection', function(socket){ ...

在该代码之前创建数组变量来存储所有带有附加数据的套接字:

var connectionList = [];
io.on('connection', function(socket){
  var connection = {
    socket:socket,
    city: userCity,
    role: userRole
    ...
  }
  connectionList.push(connection);
}

现在,当您想要发送消息时,您会遍历所有套接字并仅向那些满足特定条件的套接字发送消息,例如当用户发送请求时:

socket.on('somerequest', function(data){
  if(<some validation rules for data>){
    connectionList.forEach(function(otherConnection){
      if(<some conditions to send message>){
        otherConnection.socket.emit('message', somedata);
      }
    });
  }
});

这为您提供了巨大的配置可能性。

但请记住从列表中删除已关闭的连接! 像这样的事情:

socket.on('disconnect', function(){
  var i = connectionList.indexOf(connection);
  delete connectionList[i];
  connection = null;
});

关于ios - 使用 socket.io v1.3.x 将单个用户的请求发送到一组预定义用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33495776/

相关文章:

ios - 将 AnyObject 保存到 NSUserdefaults

javascript - 如何模拟回调函数以测试其位于另一个函数的参数内

javascript - 即使元素已被推送,数组仍为空

javascript - 为什么我的构造函数没有继承 super 构造函数的方法?

c++ - zeromq:重置 REQ/REP 套接字状态

c - XDR 编码功能

ios - 解析 PFObjects 的 NSCoding

ios - 如何在 Xcode 4.5 中制作 .ipa 文件?

Python `socket.getaddrinfo` 需要 5 秒大约 0.1% 的请求

ios - 获取一对多关系值核心数据