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

时间:2011-08-18 18:21:48

标签: php ajax chat websocket livechat

我一直在考虑创建一个聊天应用程序,但是不太了解如何创建一个有效的应用程序,所以我希望我们可以谈论制作一个“最好”和最有效(性能)的方法

因此,基本功能可能会看到彼此的消息和聊天记录。

所以我正在考虑使用codeigniter和ajax创建视图并发送每条消息,每次发送消息时,消息都会在聊天日志的表格中排序。然后我想,如果每次发送一条消息发送一个查询,这个应用程序的扩展都会很糟糕,所以我想把日志存储在客户端的cookie或javascript对象上,一旦离开聊天,就会发送日志并存储在数据库中。但后来我不知道这是否有效或安全性非常差。

另外,我正在阅读关于聊天和websockets的stackoverflow上的内容,并在ajax APE中运行作为管理发送消息的有效方式......但我对websockets以及如何使用它们等并不是很了解...

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

关于制作聊天应用程序的最佳/最有效方式的任何建议?

你建议使用node.js或socket.io。

由于我对这两者一无所知,哪一个更好?

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

3 个答案:

答案 0 :(得分:2)

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

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

如果您对WebSockets感兴趣但又不想处理所有跨浏览器的怪癖,请务必查看Socket.IO。它是一个使用WebSockets的库,我发现它非常适合处理所有不同的浏览器版本。

希望有所帮助!

答案 1 :(得分:2)

node.jssocket.io似乎最适合此任务。

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

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

答案 2 :(得分:1)

如果你真的很难实现核心大,那么你可能想考虑为消息队列替换数据库。 Second Life为游戏内消息传递了他们的消息队列评估。

http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes

虽然聊天记录不太可能像在数据库中那样持久存储在您的服务器上。