最近花了1月的时间写了一个小工具,主要用来爬网,这篇博客先说说这个http请求工具吧。
还是先看看整个模块的类图吧:
先说说这个类的作用吧:
RequestInfo 请求类型参数 ,为了便于后面扩展所以这里封装成一个class 。
ResponseInfo 返回参数的类型 返回数据有 请求参数、http返回头和返回体(流的形式)、返回的状态
RequestStateObject 是在http请求是用来保存状态的一个基类
LogManager 是用来记录异常的工具类
IHttpRequest 是用来发起Http请求的接口,RequestHttpWebRequest 是用HttpWebRequest来实现这个接口,RequestSocketHttp用socket来实现这个接口。
StoreBase 用来存储请求对象,StoreMemory把请求对象存储在 ConcurrentQueue<RequestInfo> 而StoreMSMQ 把请求存放到MSMQ中。
RequestFactoryBase 负责创建IHttpRequest的实例,而RequestFactoryMemory继承了RequestFactoryBase
说说主要的流程吧:
1.用户调用RequestFactoryBase的AddRequestTask 发起http请求,同是调用AddResponseHandler 注册回调函数。
2.RequestFactoryBase 把接收到的请求实例放到StoreBase 中,通过调用StoreBase的AddRequestInfo 来实现这个功能
3.RequestFactoryBase中一个线程在实时从队列中获取请求实例,通过调用StoreBase的GetRequestInfo来完成。
4.当RequestFactoryMemory获取请求对象后,在通过GetAvailableHttpRequest 获取可以使用的IHttpRequest,开始异步请求url
5.当请求完成时 IHttpRequest 是发起新线程 来执行回调函数。