长轮询导致服务器问题?

时间:2011-09-25 06:55:06

标签: php javascript ajax long-polling

我终于制作了一个简单的聊天页面,我现在想做一段时间,但我遇到了服务器问题。

我不确定长轮询是否是正确的术语,但据我所知,我认为是。我有一个对php页面的ajax调用,该页面检查mysql数据库中的消息的时间比ajax请求中发送的时间更新。如果没有更新的消息,它会一直循环和检查,直到有。否则,它只返回新消息,客户端脚本在收到消息后立即发送另一个ajax请求。

一切正常,除了000webhost上的服务器在几条聊天消息后停止响应的部分,x10主机上的服务器给我一个关于达到资源限制的消息。

也许这是一个愚蠢的方式来做一个聊天系统,但我知道该怎么做。如果有更好的方法,请告诉我。

编辑:神圣的地狱,我刚刚想到我没有在服务器上的while循环中放置任何睡眠时间。

3 个答案:

答案 0 :(得分:1)

你可以在这方面找到很多解读,但我不相信免费网络托管会让你做你想做的事情。 PHP也没有真正用于创建聊天系统。

我建议使用WebSockets,并使用Node.JSSocket.IO或Tornado与Python;有很多解决方案,但大多数都需要你运行自己的服务器,因为它需要运行一个与多个连接交互的整个程序,而不是只用一个连接开始和结束的简单脚本。

答案 1 :(得分:0)

使用相同的策略,服务器上是否有更新的消息呢?服务器将始终返回较新消息的列表 - 当没有较新消息时,此列表可能为空。空列表也可以编码为特殊数据令牌。 然后,客户端以相同的方式在两种情况下进行:它处理接收的数据并在一段时间后请求新消息。

答案 2 :(得分:0)

确保你在每个循环中睡眠(1)你的代码,代码将每秒进入循环几次,强调你的数据库/服务器。

但是,nodejs或websockets是处理实时聊天的更好技术。