我有一个 AJAX 客户端,它必须从服务器接收消息。来自服务器的一些消息不像请求-响应类型。例如,玩家可以进入的影像游戏。服务器必须向客户端发送有关玩家进入的信息。但是服务器如何在没有客户端请求的情况下通过http向客户端发送消息呢?
我唯一能发明的决定:客户端向服务器发送请求(getNewPlayerEnter 请求),超时时间长,服务器检查播放器设置的状态,如果设置中有新玩家,则服务器向客户端发送信息,如果不是,服务器会“休眠”一段时间,并在“休眠”服务器再次检查玩家设置后。
我认为我的决定有点愚蠢(也许不少)。如何正确实现?
附:对不起我的英语
最佳答案
您指的是“轮询”,您的客户端代码将每隔 X 秒向服务器发出请求以检查更新。
这是一个易于实现的解决方案,这就是您经常看到它的原因。但是,更好的解决方案是使用 Comet。
2006 年,Alex Russell 创造了术语“Comet”来标识一种技术,通过这种技术,客户端可以向服务器发出 HTTP 请求,而服务器可以无限期地保持该连接打开。有了这个打开的连接,服务器就可以在有更新时将更新推送到响应中的客户端。
当收到响应时,客户端立即打开一个新的长期 HTTP 连接。
我鼓励您搜索“Comet”以及您正在使用的任何服务器端语言,以找到可以帮助您入门的框架。
Comet Daily 有一些非常棒的演示,从聊天应用程序到游戏,都使用了 Comet。如果您有 Firebug 或 Chrome Debugger 之类的工具,您可以观察这些实时应用程序的响应/请求周期。
关于http - 如何通过http实现服务端和客户端的双向通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4701142/