【问题标题】:Understanding Comet by Example通过示例了解彗星
【发布时间】:2011-01-06 18:22:42
【问题描述】:

它的功能就是所谓的“服务器推送”,google wave 似乎也利用了这一点。

有人可以通过代码 sn-p 解释这个概念在 Web 应用程序中的实际工作原理吗?

【问题讨论】:

    标签: implementation comet server-push


    【解决方案1】:

    一些伪javascript:

    <script>
    //open connection to the server, updateFunc is called every time server sends stuff
    //For example ticker price for Google (GOOG)
    var connection = CometLibrary.subscribe("http://server", "GOOG", updateFunc);
    
    //data is JSON-encoded
    function upudateFunc(data) {
      var elem = $("#GOOG .last");
      if (elem.value < data.last)
        elem.css("color", "green");
      else (elem.value > data.last)
        elem.css("color", "red");
      elem.value = data.last;
    }
    
    </script>
    <span id="GOOG">GOOG: <span class="last"></span></span>
    

    所以上面的代码建立了一个到服务器的持久连接,并且每次服务器上有更新时都会调用回调函数。如果价格上涨或下跌,价格会改变颜色,如果没有变化,价格会保持原来的颜色。

    另一种方法是让间隔计时器每隔这么多秒发出一次 AJAX 请求,这会产生建立和断开连接的开销。

    【讨论】:

    • CometLibrary 是如何实现的?我在想,如果请求的连接还没有完成,客户端如何得到响应?
    • 试一试:goldfishserver.com 如果您在另一个浏览器中键入消息,您可以看到在 Firefox 中更新的内容。您还将看到新的东西正在同一个连接中出现。我认为连接每 5 秒重置一次是为了检测连接错误。
    • 至于它是如何实现的,相信我,你不想知道。涉及很多棘手的黑客行为。
    • CometLibrary 的实现方式与相应的服务器组件保持一致。详情请见stackoverflow.com/questions/2015443/…
    • 准确地说,就我而言,comet 客户端/服务器交互是它自己的协议。
    猜你喜欢
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多