用PHP+;MySQL+;JavaScript
我希望使用PHP、MySQL和JavaScript创建一个Web聊天系统 目前,我将消息存储在一个MySQL数据库中,其中包含一个增量ID(是的,它被索引)、一个时间戳、发送者和消息本身。然后,我使用AJAX每隔500毫秒查询一次数据库,查看是否有比上次收到的消息更新的消息。然而,我有一种感觉,这可能是非常低效的,因为当多个用户在线时,它将导致MySQL服务器上的巨大负载。看看谷歌和这里,一切似乎都指向了这种方式 我的问题:有更好的方法吗?关于如何减少服务器负载的任何提示都是受欢迎的 我在ApacheWebServer上使用PHP5.3,因此与之兼容的库或插件就可以了 编辑:用PHP+;MySQL+;JavaScript,php,javascript,mysql,ajax,Php,Javascript,Mysql,Ajax,我希望使用PHP、MySQL和JavaScript创建一个Web聊天系统 目前,我将消息存储在一个MySQL数据库中,其中包含一个增量ID(是的,它被索引)、一个时间戳、发送者和消息本身。然后,我使用AJAX每隔500毫秒查询一次数据库,查看是否有比上次收到的消息更新的消息。然而,我有一种感觉,这可能是非常低效的,因为当多个用户在线时,它将导致MySQL服务器上的巨大负载。看看谷歌和这里,一切似乎都指向了这种方式 我的问题:有更好的方法吗?关于如何减少服务器负载的任何提示都是受欢迎的 我在Apa
忘记在原始帖子中提到,但我并不担心支持IE或其他过时的浏览器。您应该研究ajax长轮询,简而言之,这是一个简单的ajax调用,但如果没有新数据,则不会从服务器返回结果。您只需在服务器端执行一个简单的循环,直到新数据可用,然后返回它。当然,如果在一段时间后(例如1分钟)没有结果发送到客户端,您最终必须停止此操作,然后重新启动呼叫。我想,对于存储引擎而言,该聊天太密集了。也许,
内存
表格类型就可以了,永远不用它。我和几个开发人员谈过,每个人都同意,聊天的最佳选择是甚至编写自己的定制守护进程(仅内存存储为weel)
对于客户机部分,您可以通过flash/Java对象了解短轮询、长轮询和web套接字/套接字
使用AJAX每隔500ms查询一次数据库
是短轮询。潜在可行的基本方法:
- 将您最近的50封邮件缓存在memcache中。每当向数据库中添加新条目时重置此项。当新用户连接时,向他们发送这50条消息以填充他们的聊天室
- 使用第三方服务,如向客户发送消息。每当一条新消息被发送到你的聊天室,就在pubnub上发送出去。成功写入数据库后,服务器代码将执行此操作
理想情况下,事件环境是此类应用程序的理想选择。灯组不是特别合适。我建议使用此库。Pubnub是一种通过javascript或任何TCP语言(如PHP)发送无线电信号的简单方法,javascript会立即接收发送的消息 在PHP中,您只需将其保存到数据库中,然后使用Pubnub的PHP API将消息发送给页面上的其他所有人
如果您熟悉Html、Javascript和PHP,那么学习起来相当容易。我会推荐它。您询问的是一个专门用PHP、MySQL和带有JavaScript的HTML构建的网络聊天系统。有很多选择,包括预构建的解决方案:它们都有聊天comet服务,由云服务提供支持,比如可以自己托管。请参阅有关CometServices的更多信息,您可以在其中比较服务提供商。还有几个选择,不过我建议从这里开始。如果您需要更简单的解决方案,如HTML和JavaScript-only解决方案,您可以查看这是一个关于构建实时web应用程序的博客,使用10行JavaScript代码的示例聊天应用程序轻松实现。该解决方案通过为所有浏览器和移动设备提供完整的跨平台解决方案来缩短开发时间。套接字是比AJAX轮询更好的解决方案,但是,关于如何将基于套接字的聊天与MySQL集成,没有太多的内容 我做了一些测试,这里有一个基本示例: 它使用Ratchet()在PHP中创建聊天服务器
您可以通过向服务器发送包含聊天对象信息的JSON向DB发送聊天消息(当然,如果您有用户会话)您的过程是正确的。如果它导致加载,那么只需尝试增加时间(500ms)一点点。请看一下:&还有:您能提供一个代码示例吗?看起来这可能是我想要的,但我现在不知道该怎么做。