【发布时间】:2011-12-22 15:29:06
【问题描述】:
假设我使用 LAMP 进行了简单的 VPS 设置(因此 PHP 和 MySQL 在同一台服务器上,并且没有附加其他字符串)。并假设我想在我的网站上制作一个自己编写的 ajax 聊天客户端。
显然,对话中的每个参与者都必须不断倾听新事物的说法。由于很可能两个或多个参与者在同一秒内说了什么(每秒刷新一次以上可能会导致疯狂的系统负载),在我看来,我需要为每个参与者存储一个列表自上次刷新以来发生的事情。
执行此操作的“最佳”方式是什么(就系统负载而言)?在下文中,“事件”只是“任何参与者在聊天中说任何话”。显然,这也可以用于更一般的情况。
(A) 使用 MySQL,每秒连接到 db 并询问事件 WHEREparticipant_id = $participant_id? (然后删除所有这些,因此它们只被提取一次)
(B) 创建一个文件 $participant_id.php 并将事件附加到它(以 PHP 格式,以便可以包含它,然后在下次刷新时清空或删除该文件?
(C) 有谁知道其他有用的替代品吗?
【问题讨论】:
-
在内存中存储最后 x 秒的文本似乎是可行的。您仍然可以将文本记录到 mysql,但在正常情况下您不需要向 mysql 索要它,因为所需的所有内容要么在内存中,要么已发送到客户端。
-
在我回答之前,您是否考虑过使用消息队列?
-
@Chris:我如何将这些存储在 PHP 的 RAM 中?或者您会为此推荐其他非 php 方法吗?
-
@Xepoch:我没有考虑消息队列,我将阅读这些消息队列。感谢您的提示!
-
您是否需要保存聊天以供以后使用?否则,请参阅我的答案。
标签: php mysql performance file-io