假设我有一个简单的VPS设置与LAMP(所以在同一台服务器上使用PHP和MySQL,没有附加其他字符串)。并假设我想在我的网站上创建一个自编的ajax聊天客户端。
显然,谈话中的每个参与者都必须不断地倾听所说的新事物。由于两个或更多参与者很可能在同一秒内说出某些内容(并且每秒刷新一次以上可能会导致疯狂的系统负载),在我看来,我需要为每个参与者存储一个列表自上次刷新以来发生的事情。
这样做的“最佳”方式(就系统负载而言)?在下文中,“事件”只是“任何参与者在聊天中说什么”。显然,这也可以用于更一般的。
(A)使用MySQL,每秒连接到数据库并询问事件WHERE participant_id = $ participant_id? (然后删除所有这些,这样它们只被提取一次)
(B)创建一个文件$ participant_id.php并将事件附加到它(以PHP格式,以便可以包含它,然后在下次刷新时清空或删除文件?
(C)有没有人知道其他有用的替代方案吗?
答案 0 :(得分:1)
在A和B上你仍然有效地进行投票。您将要查询真正不太糟糕的MySQL,或者您可以通过select()
通知文件更改但是您仍然需要解析以查看新数据是否是文件端的正确内容
对于概念和支持易用性而言,打败数据库真的很难,因为您不必担心锁定语义。在这种结构中,调试和消息跟踪是干净的。
但是,我建议您调查msg_send()
和msg_receive()
(PHP)函数,以将此数据放入基础消息队列中。您的问题似乎是一个消息排队问题,应由该机制解决。
答案 1 :(得分:1)
另一种方法是使用套接字连接。连接到套接字服务器守护程序的每个人都能够向守护进程发送消息,守护进程然后将消息发送到所有或部分订阅者列表,这使得聊天瞬间完成,而根本不需要保存数据。 / p>
从客户端创建套接字连接的好方法是套接字IO。见下文。
用于创建套接字服务器守护程序的一项好技术是node.js.这是一个服务器端事件驱动的基于javascript的库。对于像这样的事情非常有效。见下文。
答案 2 :(得分:0)
有没有人知道其他有用的替代方案吗?
如果您在PHP上搜索简单的解决方案,我可以提供两种方式:
<强>缓存强>
这意味着您将MySQL保留为商店数据,但安装APC(此解决方案对于小型服务器和应用程序来说最简单,最快)或Memcached(更好地使用宽度多个服务器)。对于每个读取请求,您检查APC / Memcached以获取数据,并仅在您的缓存被删除或更新时询问MySQL。在每个写请求中,您在MySQL中插入数据并更新缓存。
其他数据库
在这种情况下,您可以为一个基于内存的DB(例如MongoDB)更改MySQL。而你可能不害怕硬盘使用。