从事件名称中提取套接字 io 服务器

Posted

技术标签:

【中文标题】从事件名称中提取套接字 io 服务器【英文标题】:Abstracting socket io server from event name 【发布时间】:2016-09-09 05:40:48 【问题描述】:

我正在尝试创建一个可以监听变量事件名称(客户端将启动)的 SocketIO 服务器,例如

socket.on( X, function(msg) // X = any event name provided by the client
    io.emit(X, msg); // Emit events to all the clients listening to the same event name
);

例如,如果客户端发出类似"eventX" 的事件,服务器应该能够侦听"eventX" 并发送给连接到服务器并侦听“eventX”的所有其他客户端。

我的想法是,服务器不应该关心一组客户端使用的事件的名称,并且当一组客户端使用不同的名称时,同一段服务器代码应该能够发出事件交流。

【问题讨论】:

您可以很容易地做到这一点,方法是创建一个服务器侦听的主消息名称,然后将客户端发送时的第一个参数作为客户端选择的子消息名称。可以发送特定于子消息名称的其他参数。这可以满足您的要求。 @jfriend00 这听起来是一个很好的解决方案!当客户端数量增加时,这种方法会不会有任何陷阱(当然,当这种情况发生时,我会横向扩展到不同的端口和虚拟机)? 扩展到大量客户端不应该真正受到此方案的影响,只要您只向需要它的特定客户端发送信息。如果您过度广播(例如,向许多不需要它们的客户端发送消息),那么事情可能会变得低效。 【参考方案1】:

您可以很容易地做到这一点,方法是创建一个服务器侦听的主消息名称,然后将客户端发送时的第一个参数作为客户端选择的子消息名称。可以发送特定于子消息名称的其他参数。这可以满足您的要求。

【讨论】:

以上是关于从事件名称中提取套接字 io 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Express 4 路由中使用 socket.io 向连接的套接字发出事件?

如何从 socket.io 获取原生事件数组?

io.on('connection')事件是否需要将数据发送到预先存在且已连接的套接字?

socket io:如何传递参数来断开套接字事件?

Sails 0.11 从服务器端捕获套接字事件

事件上的 C++ 侦听器未使用套接字 io C++ 客户端获取事件