讨论:php中高效的实时聊天应用程序?

讨论:php中高效的实时聊天应用程序?,php,ajax,chat,websocket,livechat,Php,Ajax,Chat,Websocket,Livechat,我一直在考虑创建一个聊天应用程序,但对如何创建一个有效的聊天应用程序知之甚少,所以我希望我们可以讨论制作聊天应用程序的“最佳”和最高效(性能)的方法 因此,基本功能可能是查看彼此的消息和聊天日志 因此,我考虑使用codeigniter和ajax创建每条消息的视图和发送,每次发送消息时,消息都会在聊天日志的表中排序。然后我想,如果每次发送消息时都会发送一个查询,那么这个应用程序的伸缩性将非常糟糕,因此我想将日志存储在客户端的cookie或javascript对象上,在离开聊天室时,日志将被发送并存

我一直在考虑创建一个聊天应用程序,但对如何创建一个有效的聊天应用程序知之甚少,所以我希望我们可以讨论制作聊天应用程序的“最佳”和最高效(性能)的方法

因此,基本功能可能是查看彼此的消息和聊天日志

因此,我考虑使用codeigniter和ajax创建每条消息的视图和发送,每次发送消息时,消息都会在聊天日志的表中排序。然后我想,如果每次发送消息时都会发送一个查询,那么这个应用程序的伸缩性将非常糟糕,因此我想将日志存储在客户端的cookie或javascript对象上,在离开聊天室时,日志将被发送并存储在数据库中。但我不知道这是否有效,或者在安全方面是否会非常糟糕

此外,我在stackoverflow上阅读了一些关于聊天和WebSocket的内容,并在ajax APE中运行,作为管理发送消息的有效方法。。。但我对WebSocket以及如何使用它们等方面的知识不太了解

无论如何,我很确定我可以制作一个聊天应用程序,但是一个好的,有效的,可扩展的,没有

关于制作聊天应用程序的最佳/最有效方法,有什么建议吗

有些人建议使用node.js或socket.io

既然我对那两个一无所知,那哪一个更好


我还注意到,在node.js示例中,他使用一台服务器来管理整个聊天室,这是否意味着我需要为每个聊天室/聊天室使用node.js服务器?

即使您正在考虑使用PHP和AJAX来构建它,如果这是您的一个选项,我强烈建议您这样做。它更适合这样的事情;特别是与使用Node.js相关的昂贵HTTP请求的AJAX相比,它的一大好处是它在执行多种I/O时速度非常快,而且是异步的。另外,Node.js进程是非阻塞的,这有助于使其更快

你也应该看看。代码是由Node.js的创建者自己编写的。此外,Node.js还可以与数据库交互,因此您不需要使用基于文本的日志或任何东西

如果你对WebSocket感兴趣,但又不想抓住所有跨浏览器的怪癖,那么一定要去看看。这是一个用于处理WebSocket的库,我发现它非常擅长处理所有不同的浏览器版本


希望有帮助

尽管您正在考虑使用PHP和AJAX构建此功能,但如果您愿意,我强烈建议您使用。它更适合这样的事情;特别是与使用Node.js相关的昂贵HTTP请求的AJAX相比,它的一大好处是它在执行多种I/O时速度非常快,而且是异步的。另外,Node.js进程是非阻塞的,这有助于使其更快

你也应该看看。代码是由Node.js的创建者自己编写的。此外,Node.js还可以与数据库交互,因此您不需要使用基于文本的日志或任何东西

如果你对WebSocket感兴趣,但又不想抓住所有跨浏览器的怪癖,那么一定要去看看。这是一个用于处理WebSocket的库,我发现它非常擅长处理所有不同的浏览器版本

希望有帮助

并且似乎最适合此任务

js允许以低内存使用率处理许多持久连接,这非常适合处理所有聊天客户端。io是websockets/comet/long轮询的抽象,允许在节点服务器和web浏览器之间传递消息

您仍然可以使用codeigniter或任何其他用户界面框架。

并且似乎最适合此任务

js允许以低内存使用率处理许多持久连接,这非常适合处理所有聊天客户端。io是websockets/comet/long轮询的抽象,允许在节点服务器和web浏览器之间传递消息


您仍然可以使用codeigniter或任何其他用户界面框架。

如果您真的要做一个大的硬核,您可能需要考虑替换消息队列的数据库。SecondLife为游戏中的消息传递提供了消息队列评估


尽管如此,聊天日志不太可能像数据库一样持久保存在服务器上。

如果你真的要做一个大的硬核,你可能需要考虑将数据库替换为消息队列。SecondLife为游戏中的消息传递提供了消息队列评估


尽管如此,聊天日志可能不会像数据库一样持久保存在您的服务器上。

嘿,thx,不过我还是想知道数据库部分。是否每次发送消息时都会存储在数据库中?我想这将是一个很大的瓶颈。没问题。您不必将每条消息存储在数据库中,它只是一个选项。如果您想这样做,您必须自己编写该功能。我听说过mongodb、couchdb和redis在node.js中使用数据库的优点。我最后一次听说mongodb是最快的,但那是很久以前的事了,所以我可能完全错了。它肯定比使用mysql或postgresql做你想做的事情要快…但是你必须意识到,一旦整个数据集不完全符合MemoryInterest,这些数据库的性能就不会很好。你提到过那个事实吗?我以前从没听说过…在满内存情况下对mongodb进行性能测试的博客文章。嘿,thx,不过我还是想知道数据库部分。是否每次都将每条消息存储在数据库中