提问人:Martin 提问时间:10/11/2023 更新时间:10/11/2023 访问量:25
在使用 Redis 适配器进行广播之前拦截和处理消息 Socket.io
Intercepting and Processing Messages Before Broadcasting with Socket.io Redis Adapter
问:
我正在开发一个使用 Socket.io 及其 Redis 适配器的实时聊天应用程序,以实现跨多个实例的可扩展性。我想实现的功能之一是根据每个用户的首选语言自动翻译消息。
我设想的流程如下:
- 用户提交消息。服务器捕获它并使用 redis-adapter 将其广播到房间。
- 在 Redis 上检测到新消息后,实例会检索该消息,识别聊天室中的成员,并根据每个收件人的语言设置翻译消息。
- 然后,房间中的每个客户都会收到他们选择的语言的消息。
问题:有没有办法在使用 Socket.io Redis 适配器将消息广播到房间中的客户端之前拦截和处理消息?理想情况下,我希望在消息到达客户端之前处理翻译服务器端,从而消除对其他客户端-服务器请求的需要。
任何见解或替代方法将不胜感激!
谢谢!
目前,我想出的唯一解决方案是将原始消息发送给房间中的所有客户端,然后每个客户端使用他们的语言偏好向服务器发出额外的“processMessage”请求。然后,服务器翻译消息并将其发回。但是,这种方法似乎效率低下,因为它涉及客户端和服务器之间的大量来回。io.in(room).emit('message', msg);
我试图检查事件是否在服务器端触发。但是,似乎只有客户端正在接收消息。io.on('message', msg)
实际上,当从 redis-adapter 的文档中检查图表时,它似乎不可行。但是,使用 mongodb-adapter 可能是可能的。
Redis 适配器:
MongoDB 适配器:
答: 暂无答案
评论