我后台用ConcurrentHashMap<String, Session>存储用户数据,根据登录用户的id和seeion存储进去,但是如果一个用户的账号在另外的设备上登录,推送消息只能给最后登录的用户推送消息,我想让这个账号登录的所有设备都能看见这个消息
时间: 2024-05-13 09:17:26 浏览: 100
要实现多设备同时接受消息,你需要使用订阅-发布模式(Pub/Sub)或广播模式(Broadcasting)。具体来说,你可以在后台使用一个消息队列来存储所有要推送的消息,当有新消息时,将消息推送到所有与该用户相关的会话中。这样,无论用户在哪个设备上登录,都能收到该消息。
你可以使用Redis等消息队列服务来实现这一功能。具体来说,当有新消息时,你可以将消息存储到Redis中,并使用Redis的发布-订阅功能,将消息推送到所有与该用户相关的会话中。这样,无论用户在哪个设备上登录,都能收到该消息。
下面是一个使用Redis实现订阅-发布模式的示例代码:
```java
// 连接Redis
Jedis jedis = new Jedis("localhost", 6379);
// 订阅用户的消息频道
jedis.subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
// 接收到新消息,推送给所有会话
for (Session session : userSessions) {
session.getBasicRemote().sendText(message);
}
}
}, "user:" + userId);
// 发布新消息
jedis.publish("user:" + userId, message);
```
在上面的示例代码中,我们使用Redis的subscribe方法订阅了用户的消息频道,当有新消息时,会回调onMessage方法,将消息推送给所有会话。在推送新消息时,我们使用Redis的publish方法发布消息到用户的消息频道中。这样,所有与该用户相关的会话都能收到该消息。
阅读全文
相关推荐


















