http - 如何通过http实现服务端和客户端的双向通信

标签 http networking client communication

我有一个 AJAX 客户端,它必须从服务器接收消息。来自服务器的一些消息不像请求-响应类型。例如,玩家可以进入的影像游戏。服务器必须向客户端发送有关玩家进入的信息。但是服务器如何在没有客户端请求的情况下通过http向客户端发送消息呢? 我唯一能发明的决定:客户端向服务器发送请求(getNewPlayerEnter 请求),超时时间长,服务器检查播放器设置的状态,如果设置中有新玩家,则服务器向客户端发送信息,如果不是,服务器会“休眠”一段时间,并在“休眠”服务器再次检查玩家设置后。 我认为我的决定有点愚蠢(也许不少)。如何正确实现?
附:对不起我的英语

最佳答案

您指的是“轮询”,您的客户端代码将每隔 X 秒向服务器发出请求以检查更新。

这是一个易于实现的解决方案,这就是您经常看到它的原因。但是,更好的解决方案是使用 Comet。

2006 年,Alex Russell 创造了术语“Comet”来标识一种技术,通过这种技术,客户端可以向服务器发出 HTTP 请求,而服务器可以无限期地保持该连接打开。有了这个打开的连接,服务器就可以在有更新时将更新推送到响应中的客户端。

当收到响应时,客户端立即打开一个新的长期 HTTP 连接。

我鼓励您搜索“Comet”以及您正在使用的任何服务器端语言,以找到可以帮助您入门的框架。

Comet Daily 有一些非常棒的演示,从聊天应用程序到游戏,都使用了 Comet。如果您有 Firebug 或 Chrome Debugger 之类的工具,您可以观察这些实时应用程序的响应/请求周期。

http://cometdaily.com/2009/10/23/concrete-comet-examples/

关于http - 如何通过http实现服务端和客户端的双向通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4701142/

相关文章:

HTTP 内容长度小于文件字节大小,是否已完全下载?

node.js - Meteor 包中的 HTTP 请求?

c# - 从 IP 地址开始和 IP 地址计数生成 IP 范围

linux - 如何从远程位置打开系统端口(WIn、Linux、Mac)?

c# 如何在客户端管理 wcf 服务代理生命周期?

asp.net - 如何从 Python Web 客户端程序的网页中获取 VIEWSTATE 值?

ajax - 浏览器如何使用 WebSocket 处理 DNS 查找和 TLS?

security - HTTP 摘要认证

networking - docker 连接(101 : Network is unreachable)

sql-server - 如何从本地电脑连接到SQL Server数据库?