长轮询导致服务器问题


Long Polling causing server problems?

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

我不确定长轮询是否是正确的术语,但从我的理解,我认为它是。我有一个ajax调用一个php页面,检查mysql数据库的消息与时间比在ajax请求中发送的时间更新。如果没有更新的消息,它将继续循环和检查,直到有更新的消息为止。否则,它只返回新消息,客户机脚本在获得消息后立即发送另一个ajax请求。

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

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

天哪,我刚刚想到,我没有在服务器的while循环中设置任何睡眠时间。

你可以找到很多关于这方面的文章,但我不相信免费的虚拟主机会允许你做你想做的事情。PHP也不是为创建聊天系统而设计的。

我建议使用WebSockets,并使用例如Node.JS与Socket。IO,即Python的Tornado;有很多解决方案,但其中大多数都需要您运行自己的服务器,因为它需要运行一次与许多连接交互的整个程序,而不是简单的脚本,仅通过单个连接启动和结束。

无论服务器上是否有新消息,都使用相同的策略如何?服务器将始终返回一个新消息列表——当没有新消息时,该列表可能为空。空列表也可以被编码为一个特殊的数据令牌。然后,客户端以同样的方式处理这两种情况:处理接收到的数据,并在一段时间后请求新的消息。

确保你的代码在每个循环上睡觉(1),代码每秒会进入循环几次,给你的数据库/服务器带来压力。

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