PHP + MySQL + JavaScript中的网络聊天

时间:2012-03-11 09:10:30

标签: php javascript mysql ajax

我希望使用PHP,MySQL和JavaScript创建一个Web Chat系统。

目前,我正在使用增量ID(是,已编入索引),时间戳,发件人和邮件本身将邮件存储在MySQL数据库中。然后我使用AJAX每500毫秒查询一次数据库,看看是否有比最后收到的消息更新的消息。但是,我觉得这可能是非常低效的,因为当多个用户在线时,它会导致MySQL服务器上的大量负载。在谷歌和这里看了一下,一切似乎都指向这种做法。

我的问题:有更好的方法吗?任何有关如何减轻服务器负载的提示也会受到欢迎。

我在Apache网络服务器上使用PHP 5.3,因此与这些兼容的库或插件就可以了。

修改: 忘了在原帖中提及,但我并不担心支持IE或其他过时的浏览器。

6 个答案:

答案 0 :(得分:3)

潜在可行的基本方法:

  • 在memcache中缓存50条最新消息。每当将新条目添加到数据库时重置此项。当新用户连接时,向他们提供这50条消息以填充他们的聊天室。
  • 使用http://www.pubnub.com/等第三方服务向您的客户发送消息。每当有新消息发送到您的聊天室时,请在pubnub上发送。成功写入数据库后,您的服务器代码将执行此操作。

备注:我与pubnub无关。您也不需要使用上面的50条消息。根据您的设置方式,您甚至不必在连接时向他们发送任何消息。关键是在这种情况下,您希望避免用户从您的数据库中读取 - 该模型不太可能针对此类应用程序进行扩展。

理想情况下,优雅的环境非常适合这种应用。 LAMP堆栈并不是特别适合。

答案 1 :(得分:2)

我建议使用此库Pubnub。 Pubnub是一种通过javascript或任何TCP语言(如PHP)发送无线电信号的简单方法 - 并且javascript立即收到发送的消息。

在PHP中,您可以将其保存到数据库中 - 然后使用Pubnub的PHP API将消息发送给页面上的其他人。

如果您熟悉Html,Javascript和PHP - 它可以相当容易学习。我会推荐它。

答案 2 :(得分:2)

您正在询问一个专门用PHP,MySQL和HTML构建的网络聊天系统。有许多选项,包括预构建的解决方案:http://www.cometchat.com/http://www.arrowchat.com/,它们都有由http://www.pubnub.com/等云产品提供支持的聊天彗星服务,可以选择自行托管。查看有关服务提供商的CometServices http://www.cometchat.com/cometservice/third-party-alternatives的更多信息。还有几个选项,但我建议从那里开始。如果您需要更简单的内容,例如HTML和JavaScript解决方案,您可以查看http://www.pubnub.com/blog/build-real-time-web-apps-easy这是一个关于使用10行JavaScript代码中的示例聊天应用轻松构建实时Web应用程序的博客。该解决方案通过为所有浏览器和移动设备提供完整的跨平台来缩短开发时间。

答案 3 :(得分:1)

您应该查看ajax长轮询,简而言之这是一个简单的ajax调用,但如果没有新数据,则不会从服务器返回结果。您只需在服务器端执行一个简单的循环,直到有新数据可用,然后返回它。当然,如果一段时间后没有结果发送给客户端(例如1分钟),那么你最终必须停止这一点。然后重新开始通话。

答案 4 :(得分:0)

我想,对于存储引擎MySQL,聊天过于密集。也许,MEMORY表类型可以,从不使用它。我和几位开发人员交谈过,大家都同意,聊天的最佳选择是Memcache,甚至可以编写自己的自定义守护进程(只有内存存储)。

对于客户端部分,您可以通过flash / Java对象阅读有关短轮询,长轮询和Web套接字/套接字的信息。

  

使用AJAX每500ms查询一次数据库

是短轮询。

答案 5 :(得分:0)

套接字是比AJAX轮询更好的解决方案,但是关于如何将基于套接字的聊天与MySQL集成的方法并不多。

我做了一些测试,并在这里有一个基本的例子:https://github.com/andrefigueira/PHP-MySQL-Sockets-Chat

它利用Ratchet(http://socketo.me/)在PHP中创建聊天服务器。

您可以通过向服务器JSON发送聊天对象的信息(当然您有用户会话)来向数据库发送聊天消息