实现HTTP长连接
业务有个需求是为taf的HTTP客户端实现长连接
我5年前在前公司就写过cpp的HTTP连接池版本sheep/HTTP_client实现广告项目的RTB
当初的那个实现很粗糙,凑活用就行,但是现在的这个实现是给全公司人用的,首先摆在面前的问题就是实现HTTP长连接的哪个版本?
个人倾向于1.1版本,对服务端要求低比较通用,最后确实选择了1.1版本,选定了版本随之而来又有这些问题:
是否需要实现Pipelining
是否需要解析协议上的任何控制字段
需要哪些配置字段?默认值是什么?
例如连接池的默认的空闲连接数量,这种默认设置最怕大佬问到底,为什么设为5?为什么设为10?
有现有方案就可以直接转移仇恨:为什么golang设为x?为什么nginx设为x?
以域名为粒度实现每个域名一个连接池,还是以ip为粒度
当初是实现了一个基于ip的Client用来实现rpc框架(每个ip单连接多路复用),基于Client又封装了ClientPool给redis, HTTP, mysql用(每个ip连接池)
现在看着不太对劲,HTTP的长连接应该以域名为粒度吧?
-
这个放到taf框架的博文里面去了,因为初版不打算为HTTP客户端实现太多功能