Java 长轮询网络聊天:一个用户的多个设备

Java 长轮询网络聊天:一个用户的多个设备,java,ajax,chat,comet,long-polling,Java,Ajax,Chat,Comet,Long Polling,我正在进行网络聊天,用户可以登录并向任何其他登录的用户发送消息。这是通过在客户端使用长轮询和在服务器端使用异步Javaservlet实现的。它工作得很好,直到我用相同的名字从两个不同的设备登录。一旦servlet接收到用户A的消息,它将搜索A的第一个等待请求(第一个是因为第二个可能正在等待另一条消息),向他发送消息并将其从内部队列中删除。但是,当他们两个登录到一个客户端(例如移动和PC)时,只有第一个客户端接收消息。我不能为所有A请求发送它,因为等待请求的第二个可能是来自一个设备的另一个,并且发

我正在进行网络聊天,用户可以登录并向任何其他登录的用户发送消息。这是通过在客户端使用长轮询和在服务器端使用异步Javaservlet实现的。它工作得很好,直到我用相同的名字从两个不同的设备登录。一旦servlet接收到用户A的消息,它将搜索A的第一个等待请求(第一个是因为第二个可能正在等待另一条消息),向他发送消息并将其从内部队列中删除。但是,当他们两个登录到一个客户端(例如移动和PC)时,只有第一个客户端接收消息。我不能为所有A请求发送它,因为等待请求的第二个可能是来自一个设备的另一个,并且发送两次消息并不好。你有没有办法在服务器端解决这个问题?如何向用户A的所有设备发送消息,但不能多次发送来自用户A的一个设备的更多等待请求


谢谢

使用消息队列技术,如ZeroMQ或RabbitMQ,以确保消息、扇形输出等的唯一传递。不要重新发明这个特殊的轮子


还有JMS—我从未使用过它,因为在这些情况下我需要语言独立性,但如果您愿意假设Java到Java,可能会更简单。

很遗憾,我无法在服务器上安装任何东西。我所能做的就是使用一些Java库和/或修改Glassfishserver@VaclavSvejcar例如,在单独的服务器上运行MQ server。零MQ您可以完全在过程中完成。关键是你的问题不是很有建设性——你要求我们设计一个健壮可靠的消息协议,你可以从研究这些技术开始,或者从它们的API和设计中学习,或者直接使用它们。