【发布时间】:2022-11-04 02:55:03
【问题描述】:
对不起我的英语不好。 这儿存在一个问题。在我的 app.js 服务器中,我添加了套接字,我使用了 join 事件,在 'connection' 事件中是一个将套接字作为参数的函数,但是,我想将用户推入一个房间,但是这个名称room 在我的服务器的 REST API 部分的模型中可用(来自会话)。 问题。如何在我的 REST API 模型中获取和推送已连接到正确房间的用户? (每当用户请求页面时,都会触发此模型及其服务,比方说授权检查的类似物)。除了这个问题,还有另一个服务和模型负责添加,例如,某种任务,这也是一个 REST API,所以在这个模型中,我想向所有必要的用户发送消息已添加任务的套接字,除了发送者本人目前我什么都做不了。一般是发给所有人的,包括发送者,连接中的socket在REST API模型中是不能抛出的 应用程序.js
io.on('connection', (socket) => {
app.set('socket', socket);
socket.on('disconnect', () => {
socket.disconnect(true);
});
});
向所有服务和模型中的服务发送数据的控制器
const controller = (ServiceClass, params) => {
return async (req, res, next) => {
const service = new ServiceClass({
session: req.session,
sessionId: req.sessionID,
cookies: req.cookies,
socketIo: req.app.get('socketio'),
socket: req.app.get('socket'),
});
const response = await service.run(params(req));
res.json(response);
};
}
export default controller;
在用户对网站的每个请求都会触发的模型内部,在这里我试图提供合适的空间
export default class IsLoggedService extends Service {
constructor(context) {
super(context);
}
async execute() {
this.context.socket
.join(`room${userSession.roleId}`);
}
}
我也从其余 api 服务 + 模型向客户端发送有关创建任务的信息
this.context.socket
.to(`room${userSession.roleId}`)
.emit('test', 'test');
我已经查看了整个 socket.io 文档,它到处都说为了向除了你自己之外的所有人发送消息,你需要使用套接字,但这根本不起作用,它会发送给每个人,包括发送者,我也试过在service和model里面实现一个socket,都无济于事
【问题讨论】:
标签: javascript ajax rest sockets socket.io