我正在为我的网站构建一个基本的小AJAX shoutbox/chat,但我不确定如何实现服务器轮询.
这是我正在考虑的基本程序流程:
用户进入页面并显示最后10条消息
要获取其他人发送的消息,客户端javascript将请求带有timestamp参数的URL(设置为客户端收到的最后一条消息的值)
服务器返回自该时间戳以来的所有消息(最多10个).
唯一的问题是轮询服务器的频率.显然,每次添加新消息时都应该进行轮询,但是当您只是阅读其他消息时,它需要自动更新.
它应该是一个设定的时间限制吗?例如:每10秒钟.或者,它会根据使用情况而有所不同吗?例如:5秒后检查.如果没有消息,请不要再检查10秒.如果仍然没有新消息,请检查15秒,然后是20,最多可能每30秒检查一次.每次检测到新消息时,都会将计时器重置为5秒并重新开始.
考虑到我们可以在线同时拥有数百名用户,我只关心在服务器上施加不必要的压力.
......或者我弄错了什么?有没有更好的方法来实现基本的JavaScript聊天?
您可能希望研究一下所谓的Comet编程技术,将信息流式传输给用户,而不是让客户端轮询服务器.这实际上是一系列技术,其中一些可能比其他技术更好,具体取决于具体情况,例如您使用的是哪种服务器以及您需要哪种类型的客户端兼容性.
如果您的服务器一次可以处理大量打开的连接(例如,它不使用每个连接的整个线程或进程,例如nginx或基于erlang的服务器),您可能希望使用长轮询技术,一旦收到一条消息,客户端立即请求另一条消息.如果没有可用消息,则服务器只是保持连接打开,可能偶尔发送虚拟数据作为保持连接,直到消息可用.