[英]Passing extra arguments to callback function
websocketServer.on('connection', function(socket, req) {
socket.on('message', onMessage);
sub.subscribe('chat'); // sub: Redis subscription connection
sub.on('message', onSubMessage);
});
function onMessage(message) {
pub.publish('chat', message); // pub: Redis publishing connection
}
function onSubMessage(channel, message) {
// how to access 'socket' from here?
if (channel === 'chat') socket.send(message);
}
我试图摆脱尽可能少的状态和绑定,以提高WS服务器的效率,并有能力在我需要扩展的情况下仅添加更多计算机-状态只会使此事变得更加困难。 我仍然不了解有关节点内存管理和垃圾回收的所有知识。
在这种情况下,推荐的解决方案是什么? 将onSubMessage
移至connection
回调以访问socket
? 但是函数会在每个连接上初始化吗?
我还有其他选择吗?
用户打开与服务器的WebSocket连接。 如果用户发送了一条消息,它将被发送到Redis频道(也可能称为Pub / Sub主题),该频道会将其广播到每个订阅的客户端( onSubMessage
)。 Redis Pub / Sub充当集中广播者:我不必担心不同的服务器或状态,Redis向所有感兴趣的人发送消息。 无忧无虑的缩放。
您可以使用bind()
预定义回调函数的额外参数:
...
sub.on('message', onSubMessage.bind(sub, socket));
...
function onSubMessage(socket, channel, message) {
if (channel === 'chat') socket.send(message);
}
这确实会为每个新连接创建一个新的函数实例,因此就内存使用而言,使用包装函数可能没有真正的好处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.