检查 MySQL 更新并显示通知选项
Check MySQL for updates and show notifications alternatives
我正在开发一个 Java 应用程序 (JSP/Servlets),用户可以在其中相互发送消息。为此,我在 MySQL 中使用单个 table,其中包含 msg_id
、sender_id
、receiver_id
、msg_content
等字段。当 user_A 向 user_B 发送一条消息我想向 user_B 弹出一条通知,表明他有一条新消息(类似于 Facebook 通知的工作方式)。
我已经搜索了这个问题的解决方案,发现一种可能的实现方式是 AJAX 轮询。这意味着,例如,应用程序将每隔 60 秒检查上面提到的 table 是否有新行(发往 user_B 的消息),如果发现新消息,它将弹出消息。
但是,假设连接了 100 个用户。这意味着对于每个用户,每 60 秒就会向数据库发出一次请求,这听起来很糟糕。
当发生类似上述示例的情况时,应用程序不会真正 "heavy" 吗?实现此目标的其他替代方法是什么?
对于这种情况,我建议将套接字与某些消息代理一起使用,例如 RabbitMq,但还有很多其他消息代理。您无需重复检查状态,而是在消息代理和服务器中创建消息查询,因为所有客户端都通过套接字连接到该消息代理。当出现新消息时,您将其发送给所有相应的消息查询。连接到相应查询的相应客户端将立即通过套接字获取消息。
如果我没记错的话,对于 Web 应用程序,您可以使用 websocket 来创建与浏览器的连接。这就是 Facebook 用于他的通知的内容。
有关客户端 (javascript) 实现和详细说明,请参阅 this link。还有一些服务器端示例,但不适用于 PHP(例如 Node.js 或 python)
对于 this link PHP 中的服务器端,您可以在 this link 上找到完整的 PHP 实现(但不是很好的解释)。
我正在开发一个 Java 应用程序 (JSP/Servlets),用户可以在其中相互发送消息。为此,我在 MySQL 中使用单个 table,其中包含 msg_id
、sender_id
、receiver_id
、msg_content
等字段。当 user_A 向 user_B 发送一条消息我想向 user_B 弹出一条通知,表明他有一条新消息(类似于 Facebook 通知的工作方式)。
我已经搜索了这个问题的解决方案,发现一种可能的实现方式是 AJAX 轮询。这意味着,例如,应用程序将每隔 60 秒检查上面提到的 table 是否有新行(发往 user_B 的消息),如果发现新消息,它将弹出消息。
但是,假设连接了 100 个用户。这意味着对于每个用户,每 60 秒就会向数据库发出一次请求,这听起来很糟糕。
当发生类似上述示例的情况时,应用程序不会真正 "heavy" 吗?实现此目标的其他替代方法是什么?
对于这种情况,我建议将套接字与某些消息代理一起使用,例如 RabbitMq,但还有很多其他消息代理。您无需重复检查状态,而是在消息代理和服务器中创建消息查询,因为所有客户端都通过套接字连接到该消息代理。当出现新消息时,您将其发送给所有相应的消息查询。连接到相应查询的相应客户端将立即通过套接字获取消息。
如果我没记错的话,对于 Web 应用程序,您可以使用 websocket 来创建与浏览器的连接。这就是 Facebook 用于他的通知的内容。
有关客户端 (javascript) 实现和详细说明,请参阅 this link。还有一些服务器端示例,但不适用于 PHP(例如 Node.js 或 python)
对于 this link PHP 中的服务器端,您可以在 this link 上找到完整的 PHP 实现(但不是很好的解释)。