【问题标题】:How to implement dual communication between server and client via http如何通过http实现服务器和客户端的双重通信
【发布时间】:2011-01-15 17:49:35
【问题描述】:

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

【问题讨论】:

    标签: http networking client communication


    【解决方案1】:

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

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

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

    收到响应后,客户端立即打开一个新的长寿命 HTTP 连接。

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

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

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

    【讨论】:

    • 谢谢。我正在以“连接停车”的名义寻找这种方法......
    • 这真的很有用。谢谢。
    【解决方案2】:

    通常执行此操作的方式是让客户端定期(例如,每 10 秒)对服务器执行 ping 操作。如果服务器发生更改,则将更改发送回客户端。如果没有更改,则发送空白响应或您指定的某种“无更改”代码。

    【讨论】:

    • 我想过,但我认为如果我们有很多客户端 ping 服务器,这个实现可以加载服​​务器。因为我认为一个具有大超时的请求比很多请求要好。还是我错了?
    • @Alex - 如果您不断地从 N 个客户端 ping 您的服务器,它将使用大量带宽以及服务器上的大量线程。超时越小,服务器上的负载就越大。超时越大,服务器上的负载越少,但应用程序的实时性就越低。如果您想要一个实时应用程序,您需要能够立即推送更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    相关资源
    最近更新 更多