Http PipeLining

*/-->

div.org-src-container {
font-size: 85%;
font-family: monospace;
}
pre.src {
background-color:#f8f4d7
}
p {font-size: 15px}
li {font-size: 15px}

1 Pipeline and Persistent Connection — From rfc2616

1.1 Pipeline

支持持久连接 (Persistent Connection) 的客户端可以选择 Pipeline,即同时发送多个请求而无需等待
Server 回应。而 Server 在接收到这些请求时候必须按照请求的顺序来回复。这里需要注意的是,
Pipeline 只能用在持久性链接上,如果 Client 在连接是否持久还未可知的时候就去 Pipeline ,
Client 自己需要做好重试的准备,且在重试的时候,必须等到确认连接的持久性之后再去重新 Pipeline。此外,如果在所有请求都返回之前 server 就关掉了连接, Client 也需要重新发送请求 (是否需要重所有请求??)

非幂等方法(如 POST等) 不应该被 Pipeline。

1.2 Persistent Connection

HTTP/1.1 默认使用持久性连接,如非特殊情况, Client 应该假设 Server 使用持久性连接,即便
server 返出错也应该如此。如果 server 不支持持久性连接,server应该在 Http Response 的 Header
中包括 token: "Close" ,而如果 Clinet 不想维护这种连接,Client 也可以用在 Request 的 Header
值声明 "Close" 。

2 Http Pipeline and libCurl

This contents is from the curl/lib/README.pipelining file.

2.1 Background

Since pipelining implies that one or more requests are sent to a server before
the previous response(s) have been received, we only support it for multi
interface use.

2.2 Considerations

When using the multi interface, you create one easy handle for each transfer.
Bascially any number of handles can be created, added and used with the multi
interface - simultaneously. It is an interface designed to allow many
simultaneous transfers while still using a single thread. Pipelining does not
change any of these details.

2.3 API

We've added a new option to curl_multi_setopt() called CURLMOPT_PIPELINING
that enables "attempted pipelining" and then all easy handles used on that
handle will attempt to use an existing pipeline.

Details:

  • A pipeline is only created if a previous connection exists to the same IP
    address that the new request is being made to use.
  • Pipelines are only supported for HTTP(S) as no other currently supported
    protocol has features resemembling this, but we still name this feature
    plain 'pipelining' to possibly one day support it for other protocols as
    well.
  • HTTP Pipelining is for GET and HEAD requests only.
  • When a pipeline is in use, we must take precautions so that when used easy
    handles (i.e those who still wait for a response) are removed from the multi
    handle, we must deal with the outstanding response nicely.
  • Explicitly asking for pipelining handle X and handle Y won't be supported.
    It isn't easy for an app to do this association. The lib should probably
    still resolve the second one properly to make sure that they actually can
    be considered for pipelining. Also, asking for explicit pipelining on handle
    X may be tricky when handle X get a closed connection.

Http PipeLining的更多相关文章

  1. 执行大量的Redis命令,担心效率问题?用Pipelining试试吧~

    参考的优秀文章 Request/Response protocols and RTT 来源 原来,系统中一个树结构的数据来源是Redis,由于数据增多.业务复杂,查询速度并不快.究其原因,是单次查询的 ...

  2. Redis教程02——管道(Pipelining)

    请求/响应协议和RTT Redis是一个使用客户端/服务器模型(也被称作请求/响应协议)的TCP服务器. 这说明通常来讲一个一个请求的实现有以下步骤: 客户端发送请求到服务器,并从socket中以堵塞 ...

  3. <Redis Advance><Pipelining><Memory Optimization><Expire><Transactions>

    Overview About Redis pipelining About Redis memory optimization About Redis expire About Redis trans ...

  4. Redis 请求应答模式和往返延时 Pipelining

    Redis是一个CS结构的TCP服务器,使用”请求-应答”的模式.,客户端发起一个请求是这样的步骤: 客户端发送一个请求给服务器,然后等待服务器的响应,一般客户端使用阻塞模式来等待服务器响应. 服务器 ...

  5. Redis Pipelining

    Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响 ...

  6. Redis(六)管道(Pipelining)

    管道技术并不是Redis特有的,管道技术在计算机科学中有很多地方的应用. 来自wiki的解释: In computing, a pipeline, also known as a data pipel ...

  7. Redis - pipelining(管道)

    客户端向服务器发送一个查询请求,并监听 socket 返回,等待服务器响应.通常是阻塞模式,在收到服务器响应之前是挂起的,不能继续发送请求. 可以使用管道来改善这种情况.在使用管道的情况下,客户端可以 ...

  8. 计算机体系结构——流水线技术(Pipelining)

    本文导读: 一.并行技术 .并行技术分类 .新技术的设计与实现 .指令周期 二.流水线技术 .什么是流水线 .指令重叠方式 .流水工作设计 .流水线的描述方法(时空图) .流水线特点 三.流水线的分类 ...

  9. netty5 HTTP协议栈浅析与实践

      一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...

随机推荐

  1. D. Vitya and Strange Lesson Codeforces Round #430 (Div. 2)

    http://codeforces.com/contest/842/problem/D 树 二进制(路径,每个节点代表一位) #include <cstdio> #include < ...

  2. mysql 优化之查询缓存(mysql8已经废弃这个功能)

    对于缓存,一般人想到的是 redis.memcache 这些内存型的缓存. 但是实际上 mysql 也提供了缓存,mysql 里面的缓存是查询缓存,可以把我们查询过的语句缓存下来,下一次查询的时候有可 ...

  3. windows10下R配置Rstdio,怎么处理

    首先要确保电脑上只有一个R程序,然后官网下载Rstdio安装包. 配置:选择Rstdio配置界面的第三项,然后关联到R的安装文件夹下的BIN文件夹即可. 但是,直接打开Rstdio的话,界面会一片空白 ...

  4. Git2:Git基本操作

    目录 一.git全局配置 二.创建一个版本库 三.git的常用操作 1.版本提交与回退 1.1.版本提交 1.2.版本回退 2.工作区.版本库与暂存区 2.1.工作区 2.2.版本库 3.管理文件的修 ...

  5. Java Socket Timeout 总结

    原文出处:囚兔 摘要: Java的网络编程Socket常常用于各种网络工具,比如数据库的jdbc客户端,redis客户端jedis,各种RPC工具java客户端,这其中存在一些参数来配置timeout ...

  6. java基础-Map集合

    java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ...

  7. springboot 日期转化报错

    问题场景: 使用Springboot框架搭建服务,传日期参数json参数为2016-08-15 17:00:00这种格式,springboot中不能识别,将其转化为对象对应的日期属性.而是抛出异常信息 ...

  8. Ubuntu硬盘空间不足时,添加硬盘的方法

    Ubuntu下重新挂载一个硬盘:方法如下: 1 .在Vmware中关闭Ubuntu虚拟机,在设置中,添加新的硬件设备,选择Hard Disk.(这里如果不关闭Ubuntu系统就不能增加新的硬件设备) ...

  9. Mongodb 笔记03 查询、索引

    查询 1. MongoDB使用find来进行查询.find的第一个参数决定了要返回哪些文档,这个参数是一个文档,用于指定查询条件.空的查询会匹配集合的全部内容.要是不指定查询,默认是{}. 2. 可以 ...

  10. 防止jquery ajax 重复提交

    var requestSent = false; jQuery("#buttonID").click(function() { if(!requestSent) { request ...