zoukankan      html  css  js  c++  java
  • 长连接技术(Long Polling)

    在服务器端hold住一个连接, 不立即返回, 直到有数据才返回, 这就是长连接技术的原理 

    长连接技术的关键在于hold住一个HTTP请求, 直到有新数据时才响应请求, 然后客户端再次自动发起长连接请求.

    那怎么样hold住一个请求呢?服务器端的代码可能看起来像这样的

    <?php
    set_time_limit(0);  //这句很重要, 不至于运行超时
    while (true) {
        if (hasNewMessage()) {
            echo json_encode(getNewMessage());
            break;
        }
        usleep(100000);      //避免太过频繁的查询
    }

    长连接
    连接->传输数据->保持连接 -> 传输数据-> ...........->直到一方关闭连接,多是客户端关闭连接。
    长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。

    短连接

    短连接是指SOCKET连接后,发送接收完数据后马上断开连接。

    比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。

    什么时候用长连接,短连接?
    长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

    而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

    总之,长连接和短连接的选择要视情况而定。


    转载自:
    作者:郭无心
    链接:https://www.zhihu.com/question/22677800/answer/63806275
    来源:知乎
  • 相关阅读:
    HDU 3572 Task Schedule(拆点+最大流dinic)
    POJ 1236 Network of Schools(Tarjan缩点)
    HDU 3605 Escape(状压+最大流)
    HDU 1166 敌兵布阵(分块)
    Leetcode 223 Rectangle Area
    Leetcode 219 Contains Duplicate II STL
    Leetcode 36 Valid Sudoku
    Leetcode 88 Merge Sorted Array STL
    Leetcode 160 Intersection of Two Linked Lists 单向链表
    Leetcode 111 Minimum Depth of Binary Tree 二叉树
  • 原文地址:https://www.cnblogs.com/burningc/p/8973588.html
Copyright © 2011-2022 走看看