【发布时间】:2018-08-05 07:36:40
【问题描述】:
我正在开发一个网站,除其他外,该网站允许用户彼此实时聊天(类似于 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 发送了一条新消息,然后将其显示在聊天窗口中?
【问题讨论】:
-
您是回答这些问题的最佳人选,可以在生产级硬件上对您的实现进行负载测试。它还取决于您的表的配置方式以及它们是否具有适合您查询的索引。
-
您可能想阅读这篇文章,了解何时要使用哪种请求 In what situations would AJAX long/short polling be preferred over HTML5 WebSockets?
-
此外,基于订阅和发布的系统对于此类应用程序应该具有最佳性能。
-
谢谢,我会检查 HTML5 websockets。它们是否允许多个用户同时聊天,还是仅限于一次打开的对话?
标签: javascript sql ajax chat