如何在java websocket中在线后发送离线用户的消息?
我正在尝试使用WebSocket编写聊天,对于脱机用户,我使用java队列,如果用户脱机,我会将消息保留在队列中,当用户联机时,我会检查队列是否为空,如果不是,则使用循环从队列中删除每条消息。问题是,即使所有消息都在队列中,它也只向用户发送最后一条消息, 以下是我的onOpen方法:如何在java websocket中在线后发送离线用户的消息?,java,websocket,java-websocket,Java,Websocket,Java Websocket,我正在尝试使用WebSocket编写聊天,对于脱机用户,我使用java队列,如果用户脱机,我会将消息保留在队列中,当用户联机时,我会检查队列是否为空,如果不是,则使用循环从队列中删除每条消息。问题是,即使所有消息都在队列中,它也只向用户发送最后一条消息, 以下是我的onOpen方法: @ServerEndpoint(value = "/chat/{room}/{user}", encoders = ChatMessageEncoder.class, decoders = ChatMessageD
@ServerEndpoint(value = "/chat/{room}/{user}", encoders = ChatMessageEncoder.class, decoders = ChatMessageDecoder.class)
public class ChatEndpoint {
private final Logger log = Logger.getLogger(getClass().getName());
private static final Map<String, Queue<ChatMessage>> userMessageBuffer = new HashMap<>();
@OnOpen
public void open(final Session session,
@PathParam("room") final String room,
@PathParam("user") final String userId) {
log.info("session openend and bound to room: " + room);
// session.getUserProperties().put("room", room);
session.getUserProperties().put("user", userId);
Queue<ChatMessage> userMsgs = userMessageBuffer.get(userId);
ChatMessage sendChat = new ChatMessage();
if (userMsgs != null && !userMsgs.isEmpty()) {
for (int i = 0; i < userMsgs.size(); i++) {
sendChat = userMsgs.remove();
System.out.println("size!!!!!! " + sendChat.getMessage());
try {
session.getBasicRemote().sendObject(sendChat);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (EncodeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}}
@ServerEndpoint(value=“/chat/{room}/{user}”,encoders=ChatMessageEncoder.class,decoders=ChatMessageDecoder.class)
公共类聊天端点{
私有最终记录器log=Logger.getLogger(getClass().getName());
私有静态最终映射userMessageBuffer=newhashmap();
@奥诺彭
公开作废公开赛(最后一场),
@PathParam(“房间”)最终字符串房间,
@PathParam(“用户”)最终字符串(用户ID){
log.info(“会话打开并绑定到房间:“+房间”);
//session.getUserProperties().put(“room”,room);
session.getUserProperties().put(“用户”,userId);
Queue userMsgs=userMessageBuffer.get(userId);
ChatMessage sendChat=新建ChatMessage();
if(userMsgs!=null&&!userMsgs.isEmpty()){
对于(int i=0;i
有人知道问题出在哪里吗?我没有检查完整的代码,但肯定没有
for (int i = 0; i < userMsgs.size(); i++)
您应该使用while循环
while(!userMsgs.isEmpty()){
.....
}
您说您只能向用户发送最后一条消息,可能是因为队列中只有2条消息。我知道这很少见,但根据您的代码应该是这样。您确实意识到,
userMsgs.size()
每次for循环都会返回越来越小的值?什么是您的message broker?是的,它每次都会变小什么是message broker?除非您特别需要I
,否则,只需使用while(userMsgs.size()>0)
循环,而不是for
循环。
while(!userMsgs.isEmpty()){
.....
}