AJAX 聊天应用程序的刷新率



我正在开发一个网站,该网站允许用户彼此实时聊天(类似于Facebook聊天)。消息存储在MySQL表messages中,其中包含消息的ID,发送方ID,接收方ID和时间。

当用户 A 与用户 B 聊天时,我通过 SQL 语句SELECT * FROM messages WHERE (senderID='userA' AND receiverID='userB') OR (senderId='userB' AND receiverID='userA')获取他们的所有消息。此语句检索用户 A 和用户 B 之间的所有消息。

打开聊天时,我每秒发送一个AJAX 请求(应该更少/更多?)以检查数据库中这两个用户之间是否有任何新消息。

我的问题是:

  • 当数据库中有很多消息时,数据库每 X 秒运行一次这种 SQL 语句的要求有多高?
  • 如果每分钟有数千个请求,我的方法是否足够好?
  • 有没有更好/更快的方法来确定用户 A 是否向用户 B 发送了新消息,然后将其显示在聊天窗口中?

你真的应该使用 WebSockets 来实现这一点,但如果你真的想进行轮询,这就是你可以做到的:

您的系统应包含对话用户参与者消息

  • John第一次与Mary开始对话时,您将创建一个具有独特conversation_id的新对话。对话的参与者玛丽约翰

  • 当用户首次打开过去的对话时,您SELECT * FROM messages WHERE conversation_id = 'xyz'

  • 从那时起,当约翰向玛丽发送消息时,您只需将该消息INSERT您的数据库中即可。

  • 当玛丽发送下一个投票信号时,她在消息中包含了她收到的最后一个message_id。这使您可以SELECT * FROM messages WHERE message_id > 115 AND conversation_id = xyz.

  • 然后,Mary 将新邮件附加到她现有的邮件列表中。

这假定message_id是自动递增的列。

其他指针:

  • 首选 WebSockets 而不是长轮询。它们更有效,因为服务器/客户端之间的通信仅在需要时发生,即发送消息时。
  • 更喜欢非阻塞服务器技术,如 NodeJS。聊天应用程序围绕着来回发送极其频繁的小数据。像PHP这样的传统服务器技术不能很好地处理这些情况。

最新更新