讨论:php 中的高效实时聊天应用程序? [关闭]
Posted
技术标签:
【中文标题】讨论:php 中的高效实时聊天应用程序? [关闭]【英文标题】:Discussion: Efficient real time chat application in php? [closed] 【发布时间】:2011-08-18 18:21:47 【问题描述】:我一直在考虑创建一个聊天应用程序,但不太了解如何创建一个有效的应用程序,所以我希望我们可以讨论制作一个“最佳”和最有效(性能)的方法.
所以基本功能可能是查看彼此的消息和聊天记录。
所以我正在考虑使用 codeigniter 和 ajax 来创建每个消息的视图和发送,并且每次发送消息时,消息都会在聊天日志的表中进行排序。然后我想,如果每次发送一条消息都发送一个查询,这个应用程序的缩放将是可怕的,所以我正在考虑将日志存储在客户端的 cookie 或 javascript 对象中,并在离开聊天时发送日志并存储在数据库中。但是我不知道这是否可行,或者在安全方面会非常糟糕。
另外,我在 *** 上阅读有关聊天和 websockets 的内容,并在 ajax APE 中运行,作为管理发送消息的有效方法......但我对 websockets 以及如何使用它们等知之甚少......
无论如何,我很确定我可以制作一个聊天应用程序,但它是一个好的、有效、可扩展的应用程序,不......
关于制作聊天应用程序的最佳/最有效方式有什么建议吗?
你们中的一些人建议使用 node.js 或 socket.io。
由于我对这两个一无所知,所以哪个更好?
我还注意到,在 node.js 示例中,他为整个聊天室使用一台服务器,这是否意味着我需要为每个聊天室/聊天室配备一个 node.js 服务器?
【问题讨论】:
如果您不想担心基础架构,那么您可能需要考虑托管实时服务,例如 Pusher(我的工作对象)。我们还通过presence channels 内置了对聊天式功能的支持。如果您想进一步调查,我还编制了hosted realtime services 的列表。 【参考方案1】:即使您正在考虑使用 php 和 AJAX 构建它,我也强烈建议您使用 Node.js 进行类似的操作,如果您可以选择的话。它更适合这样的事情;特别是与使用与 Node.js 相关的昂贵 HTTP 请求的 AJAX 相比,它的一大好处是它在执行多种 I/O 时速度非常快,并且是异步的。此外,Node.js 进程是非阻塞的,这有助于使其更快。
你也应该看看this example。代码是由 Node.js 的创建者自己编写的。此外,Node.js 可以与数据库交互,因此您无需使用基于文本的日志或任何东西。
如果您对 WebSockets 感兴趣,但不想处理所有跨浏览器的怪癖,请务必查看 Socket.IO。这是一个用于处理 WebSockets 的库,我发现它非常擅长处理所有不同的浏览器版本。
希望有帮助!
【讨论】:
嘿,谢谢,不过我仍然想知道数据库部分。每条消息每次发送时都会存储在数据库中吗?我在想这将是一个很大的瓶颈。 没问题。您不必将每条消息都存储在数据库中,这只是一种选择。如果您想这样做,您必须自己编写该功能。我听说过关于 mongodb、couchdb 和 redis 在 node.js 中使用数据库的好消息。我最后一次听说,mongodb 是最快的,但那是很久以前的事了,所以我可能完全错了。它肯定比使用 mysql 或 postgresql 来做你想做的事情要快... 但是您必须注意,一旦整个数据集无法完全放入内存中,这些数据库的性能就不会很好 有趣。你有这个事实的参考吗?我以前从未听说过... 在满内存情况下对 mongodb 进行性能测试的博文。 colinhowe.co.uk/2011/02/23/…【参考方案2】:node.js 和 socket.io 似乎最适合这项任务。
node.js 允许以低内存使用处理许多持久连接,这非常适合处理所有聊天客户端。 socket.io 是对 websockets/comet/long-polling 的抽象,它允许在节点服务器和 Web 浏览器之间传递消息。
您仍然可以使用 codeigniter 或任何其他框架作为用户界面。
【讨论】:
所以你必须同时使用两者来制作聊天应用程序? 哪个更好?【参考方案3】:如果您真的想大搞硬核,您可能想考虑用消息队列替换数据库。 Second Life 对游戏内消息进行了消息队列评估。
http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes
虽然,聊天日志不太可能像使用数据库那样持久保存在您的服务器上。
【讨论】:
相比 node.js 或 socket.io 有什么优势? 我不知道这会是 node.js 或 socket.io 的替代品。这与数据的存储方式有关,因此请考虑将其作为 MySQL 或 NoSQL 数据库的替代品。以上是关于讨论:php 中的高效实时聊天应用程序? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
用于聊天应用的 Firebase 实时数据库或 Firestore? [关闭]