0

我正在开发一个 Java 应用程序(JSP/Servlets),用户可以在其中相互发送消息。为此,我在 MySQL 中使用单个表,其中包含 、 、 等字段msg_idsender_idreceiver_iduser_Amsg_content向 user_B 发送消息时,我想向 user_B 弹出一条通知,表明他有一条新消息(类似于 Facebook 通知的工作方式)。

我已经搜索了一个解决方案,并发现实现它的一种可能方法是通过 AJAX 轮询。这意味着,例如,应用程序每隔 60 秒就会检查上面提到的表中的新行(给 user_B 的消息),如果找到新消息,它将弹出消息。

但是,假设连接了 100 个用户。这意味着对于每个用户,每 60 秒都会向数据库发出一次请求,这听起来很糟糕。

当上面的例子发生时,应用程序不会变得非常“沉重”吗?实现这一目标的其他选择是什么?

4

1 回答 1

1

对于这种情况,我建议使用带有一些消息代理的套接字,例如RabbitMq,但还有很多其他的。您无需重复检查状态,而是在消息代理和服务器中创建消息查询,因为所有客户端都通过套接字连接到该消息代理。当新消息出现时,您将其发送到所有相应的消息查询。连接到相应查询的相应客户端将立即通过套接字获取消息。

如果我没记错的话,对于 Web 应用程序,您可以使用 websocket 创建与浏览器的连接。这就是 Facebook 用于通知的内容。

对于客户端 (javascript) 实现和良好的解释,请参阅此链接。还有一些服务器端示例,但不适用于 PHP(例如 Node.js 或 python)

对于此链接上的 PHP 服务器端,您可以找到完整的 PHP 实现(但不是很好的解释)。

于 2016-09-08T12:39:53.880 回答