我正在为我的网站构建一个基本的小型 AJAX 聊天室/聊天室,但我不确定如何实现服务器轮询。
这是我正在考虑的基本程序流程:
- 用户进入页面并显示最近 10 条消息
- 为了获取其他人发送的消息,客户端 JavaScript 将请求带有时间戳参数的 URL(设置为客户端收到的最后一条消息的值)
- 服务器返回自该时间戳以来的所有消息(最多 10 条)。
唯一的问题是轮询服务器的频率。显然,每次添加新消息时它都应该进行轮询,但是当您只是阅读其他人的消息时,它需要自动更新。
是否应该有一个固定的时间限制?例如:每 10 秒一次。或者,它应该根据使用情况而变化吗?例如:5秒后检查。如果没有消息,请再等 10 秒再查看。如果仍然没有新消息,请检查 15 秒,然后检查 20 秒,最多每 30 秒检查一次。每次检测到新消息时,请将计时器重置回 5 秒并重新开始。
考虑到我们可能有数百个用户同时在线,我只是担心给服务器带来不必要的压力。
……还是我把整个事情弄错了?有没有更好的方法来实现基本的 javascript 聊天?
您可能想了解一下所谓的Comet http://en.wikipedia.org/wiki/Comet_(programming)将信息流式传输给用户的编程技术,而不是让客户端轮询服务器。这实际上是一系列技术,其中一些技术可能比其他技术更有效,具体取决于具体情况,例如您正在使用哪种服务器以及您需要哪种客户端兼容性。
如果您的服务器可以一次处理大量打开的连接(例如,它不会为每个连接使用整个线程或进程,例如nginx http://wiki.nginx.org/Main or an erlang http://www.erlang.org/基于服务器),您可能希望使用长轮询技术,一旦收到一条消息,客户端立即请求另一条消息。如果没有可用的消息,服务器只是保持连接打开,可能偶尔发送虚拟数据作为保持活动,直到消息可用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)