简述用于windows客户端的一个异步http模块的实现
1.需要实现的feature
1.1 很容易地发起异步http请求,然后回调。1.2 能够管理http并发数。
1.3 能够支持http超时:不依赖于curl中实现的连接超时及其它超时。
1.4 请求可以取消。
2.参与者和简要分析:
Manager:接收http请求,调用curl。
Request:封装http请求。
Response:封装http回应。
线程模型:
这里实现异步一般会开线程,假定有一个UI(主)线程,可能有这些模式:
Manager在UI线程中管理若干个工作线程,curl_easy接口。
Manager在自己新起的http线程中管理若干个工作线程,curl_easy接口。
Manager在自己新起的http线程中调用curl_multi接口。
Manager在UI线程中调用curl_multi接口不合适,因为需要占用UI线程时间去select。
开多个work线程浪费资源,线程管理难度大,线程并发度的减少不会造成性能瓶颈,
因为主要耗时在网络IO上。
所以选定模型是:开一个http线程,在上面调用curl_multi接口。
解决回调问题:
这里会遇到两个问题,一个是回调的线程问题:在http中检测到IO完成,
如果直接在http中进行回调