.join()
将套接字订阅到房间。
sails.sockets.join(socket, roomName);
或者
sails.sockets.join(socket, roomName, cb);
参数 | 类型 | 详情 | |
---|---|---|---|
1 | socket | 要订阅的套接字。可以通过套接字的 ID 或传入的套接字请求 (req ) 指定。 |
|
2 | roomName | 要订阅的房间的名称。如果房间尚不存在,它将被创建。 | |
3 | _cb_ | 可选的回调函数,将在当前服务器上的操作完成时被调用(有关更多信息,请参阅下面的说明),或者如果遇到致命错误。如果遇到错误,它将使用单个参数 (err ) 被调用。 |
在控制器操作中
subscribeToFunRoom: function(req, res) {
if (!req.isSocket) {
return res.badRequest();
}
var roomName = req.param('roomName');
sails.sockets.join(req, roomName, function(err) {
if (err) {
return res.serverError(err);
}
return res.json({
message: 'Subscribed to a fun room called '+roomName+'!'
});
});
}
sails.sockets.join()
基本上等同于 Socket.IO 中的.join()
功能,但额外内置支持多服务器部署。使用 推荐的生产环境设置,sails.sockets.join()
的工作原理与文档一致,无论代码在哪个服务器上运行或目标套接字连接到哪个服务器。- 在多服务器环境中,当使用套接字 ID 参数调用
.join()
时,回调函数 (cb
) 将在 当前服务器 上的.join()
调用完成时执行。这不能保证集群中的其他服务器已经完成运行操作。- 每个套接字都会自动订阅到一个房间,该房间的名称与其 ID 相同,允许通过
sails.sockets.broadcast()
直接向套接字发送消息。- 在将
req
作为目标套接字传递之前,请确保检查req.isSocket === true
。为了使这起作用,提供的req
必须来自套接字请求,而不是任何旧的 HTTP 请求。
req
)