我有一个AJAX客户端,它必须从服务器接收消息。来自服务器的一些消息不像请求 - 响应类型。例如,玩家可以进入的成像游戏。服务器必须向客户端发送有关玩家进入的信息但服务器如何在没有客户请求的情况下通过http向客户端发送消息? 只有我可以发明的决定:客户端向服务器发送请求(getNewPlayerEnter请求)具有大超时,服务器检查播放器集的状态,如果在设置新玩家,则服务器向客户端发送信息,如果不是服务器'睡眠'一段时间,并且'睡眠'服务器检查玩家再次设置。 我觉得我的决定有点愚蠢(也许不小)。如何实施呢? 附:对不起我的英文
答案 0 :(得分:5)
您所指的是“轮询”,您的客户端代码将每隔X秒向服务器发出一次检查更新的请求。
这是一个易于实施的解决方案,这就是您经常看到它的原因。但是,更好的解决方案是使用Comet。
2006年,Alex Russell创造了“Comet”一词来识别一种技术,客户端向服务器发出HTTP请求并且服务器使该连接无限期地保持打开状态。通过此打开连接,服务器可以在有更新时将更新推送到响应中的客户端。
收到响应后,客户端会立即打开一个新的长期HTTP连接。
我鼓励您搜索“Comet”以及您正在使用的任何服务器端语言,以找到一个可以帮助您入门的框架。
彗星日报有一些非常棒的演示,从聊天应用程序到游戏,都使用Comet。如果你有像Firebug或Chrome Debugger这样的工具,你可以观察这些实时应用程序的响应/请求周期。答案 1 :(得分:0)
通常这样做的方法是客户端定期(例如,每10秒)ping一次服务器。如果服务器上有更改,则更改将发送回客户端。如果没有更改,则会发送空白响应,或者您指定的某种“无更改”代码。