在使用 Redis 适配器进行广播之前拦截和处理消息 Socket.io

Intercepting and Processing Messages Before Broadcasting with Socket.io Redis Adapter

提问人:Martin 提问时间:10/11/2023 更新时间:10/11/2023 访问量:25

问:

我正在开发一个使用 Socket.io 及其 Redis 适配器的实时聊天应用程序,以实现跨多个实例的可扩展性。我想实现的功能之一是根据每个用户的首选语言自动翻译消息。

我设想的流程如下:

  1. 用户提交消息。服务器捕获它并使用 redis-adapter 将其广播到房间。
  2. 在 Redis 上检测到新消息后,实例会检索该消息,识别聊天室中的成员,并根据每个收件人的语言设置翻译消息。
  3. 然后,房间中的每个客户都会收到他们选择的语言的消息。

问题:有没有办法在使用 Socket.io Redis 适配器将消息广播到房间中的客户端之前拦截和处理消息?理想情况下,我希望在消息到达客户端之前处理翻译服务器端,从而消除对其他客户端-服务器请求的需要。

任何见解或替代方法将不胜感激!

谢谢!

目前,我想出的唯一解决方案是将原始消息发送给房间中的所有客户端,然后每个客户端使用他们的语言偏好向服务器发出额外的“processMessage”请求。然后,服务器翻译消息并将其发回。但是,这种方法似乎效率低下,因为它涉及客户端和服务器之间的大量来回。io.in(room).emit('message', msg);

我试图检查事件是否在服务器端触发。但是,似乎只有客户端正在接收消息。io.on('message', msg)

实际上,当从 redis-adapter 的文档中检查图表时,它似乎不可行。但是,使用 mongodb-adapter 可能是可能的。

Redis 适配器:

Redis 适配器

MongoDB 适配器:

MongoDB 适配器

google-cloud-platform websocket redis socket.io 扩展

评论

0赞 Community 10/11/2023
请编辑问题,将其限制为具有足够详细信息的特定问题,以确定适当的答案。

答: 暂无答案