我正在开发一个Java应用程序(JSP / Servlets),用户可以在其中相互发送消息。为此,我在MySQL中使用单个表,其中包含msg_id
,sender_id
,receiver_id
,msg_content
等字段。当user_A向user_B发送消息时,我想要向user_B弹出一个通知,表明他有一条新消息(类似于Facebook通知的工作原理)。
我已经找到了解决方案,并发现实现它的一种可能方法是通过AJAX轮询。这意味着每60秒例如应用程序将检查上面提到的新行(消息到user_B),如果找到新消息,它将弹出消息。
但是,假设有100个用户已连接。这意味着对于每个用户来说,每隔60秒就会有一个对数据库的请求,这听起来很糟糕。
当上述示例发生时,应用程序是否会变得非常“重”?实现这一目标的其他替代方法是什么?
答案 0 :(得分:1)
对于这种情况,我建议使用带有一些消息代理的套接字,例如RabbitMq,但还有很多其他的。您可以在消息代理和服务器中创建消息查询,而不是通过套接字将所有客户端连接到该消息代理,而不是重复检查状态。出现新消息时,您将其发送到所有相应的消息查询。连接到相应查询的相应客户端将立即通过套接字获取消息。
如果我没弄错,对于Web应用程序,您可以使用websocket创建与浏览器的连接。这就是facebook用于通知的内容。
对于客户端(javascript)实现和良好解释,请参阅this link。还有一些服务器端示例,但不适用于PHP(例如Node.js或python)
对于this link上PHP中的服务器端,您可以找到完整的PHP实现(但不是很好的解释)。