爱意满满的作品展示区。
lerry

分享一篇自己写的关于 ajax 长连接的文章

  •  
  •   lerry ·
    lerry · Jan 8, 2015 · 5618 views
    This topic created in 4166 days ago, the information mentioned may be changed or developed.
    11 replies    2015-01-09 22:30:31 +08:00
    xinyu198736
        1
    xinyu198736  
       Jan 8, 2015
    概念有些混淆
    typcn
        2
    typcn  
       Jan 8, 2015
    不就是 socket.io ,连接 websocket 失败的时候自动降级的那个吗。。。

    现成全自动的,不用造轮子。。
    airyland
        3
    airyland  
       Jan 8, 2015
    这叫轮循,不叫长连接吧。websocket才叫长连接。
    xinyu198736
        4
    xinyu198736  
       Jan 8, 2015
    @airyland 长连接是 long polling ,跟socket不是一个概念,另外楼主这个只能叫做“超时连接”,跟long polling还沾不上太大的边。
    meeasyhappy
        5
    meeasyhappy  
       Jan 8, 2015
    给你赞一个
    jc4myself
        6
    jc4myself  
       Jan 9, 2015 via iPad
    ajax更多是异步的,异步就不会使用长链接
    lerry
        7
    lerry  
    OP
       Jan 9, 2015
    @xinyu198736
    @typcn
    @airyland
    @jc4myself

    感谢指教~
    我写的是关于long polling,字面上看叫长轮询更恰当一些,

    我理解的
    轮询,定时向服务器请求,服务器立即响应,
    长连接/轮询,服务器收到请求后,挂起,直到有新消息才返回, 但是为了连接的维持,设置了超时时间,同时服务器会在一定时间内返回

    可以看这里
    http://stackoverflow.com/questions/14903223/why-setting-a-client-side-timeout-when-using-long-polling

    求教 @zythum
    hitsmaxft
        8
    hitsmaxft  
       Jan 9, 2015
    @jc4myself 错 异步又不影响网络请求模式
    zythum
        9
    zythum  
       Jan 9, 2015
    我说下我的理解。可能也不是很正确。

    长链接的链接一般是不中断的。使用http协议的Transfer-Encoding:chunked方式输出。一般实现是使用一个iframe发起请求(XMLHttpResquest貌似没发使用chunked)。然后通过脚本<script>parent.xxxxxxxx</script> 来处理,还是直接用iframe作为显示就随便。

    长轮训一般使用XMLHttpResquest, 处理是发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求。然后等到服务器响应(包括超时),之后再次发起一个请求...

    特点是长链接的链接只有一个。长轮训的链接有多个。对于实时性来说。长链接更好。

    轮询,就是 setInterval(sendRequest, 500)。 定时请求一下就好了。

    以上都是基于http协议而言的。websocket不是http协议。是一个同样是tcp的协议。websocket和http起的服务时不一样的。

    @airyland 一般来说。长轮训,长连接是特指上面的两种实现方式。如果从原理来说。即保持一个链接不中断。那么websocket也是这样的。

    @typcn 这个方式很早就有了。互联网刚开始都是在线聊天室的时候都是这样处理的。

    @jc4myself 异步不一定只是XMLHttpResquest. Ajax不单是XMLHttpResquest

    字写太多了。估计有错别字。求谅解。
    zythum
        10
    zythum  
       Jan 9, 2015
    还有一个需要说的是websocket是双工的。可以通过同一个链接上行下传。 长连接单工的。只能实现服务端下传。
    tamamaxox
        11
    tamamaxox  
       Jan 9, 2015 via Android
    不如先看看meteor的方案
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   934 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 22:09 · PVG 06:09 · LAX 15:09 · JFK 18:09
    ♥ Do have faith in what you're doing.