码迷,mamicode.com
首页 > Web开发 > 详细

开发一个http代理服务器

时间:2017-08-31 19:02:34      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:开始   代理   监听端口   设置   一个   技术分享   tps   ice   send   

一、产品原型

技术分享

1、配置使用代理服务器

技术分享

技术分享

参照上图设置,HTTPS和FTP等不要设置(本代理服务器未对这两种协议进行处理), IP是 127.0.0.1 表示代理服务器是在本机,监听端口设成8888。   

在IE里设置完后,我们会发现其它浏览器也自动开始使用代理服务器了,这是因为设置代理服务器是系统的功能,每个浏览器打开的都是同一个设置代理服务器的程序。

其实,我们可以实现一个自动设置代理服务器的功能,这样,当我们的代理服务器启动的时候,就自动将本机的代理服务器设置成自己,退出的时候,再恢复成原样,这样就不再需要向上面一样手动设置了。

2、使用代理服务器

配置完毕后,在浏览器里输入网址: http://www.baidu.com 

技术分享

技术分享

我们可以清楚看到,所有的请求和响应信息都已经被监听到了。

二、关键点设计

1、业务流程

参考Fiddler 的设计思想,在程序启动时,new 一个代理(Proxy)类的实例,然后调用这个实例的Start方法,来启动代理服务,

在Start方法里就是不停的异步监听本机的8888端口(还记得刚才设置代理服务器时设置的端口吗),

        如果监听到了,就从线程池里,取出来一个线程,并在这个线程里,构造一个Session对象。一个Session对象,代表客户端与服务器的一次会话,在有代理服务器情况下的一次会话(Session)代表的是:

                1.从客户端读请求

                2.重新包装客户端的请求,转发至目标服务器. 

                3.从目标服务器读取响应信息 

                4.包装接收到的响应信息并返回给客户端。

故而在Session类里,封装一个ClientChatter类型的名为Request的对象,用来实现和客户端的通讯,

另外又封装了一个ServiceChatter类型的名为Response的对象,用来实现和目标服务器的通讯。 

技术分享

2、ObtainRequest

技术分享

3、response.ResendRequest

 

4、response.ReadRequest

 

5、returnResponse

 

开发一个http代理服务器

标签:开始   代理   监听端口   设置   一个   技术分享   tps   ice   send   

原文地址:http://www.cnblogs.com/lexiaofei/p/7459462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!