网站建设主页_互联网建设_小程序搭建_竹子建站_建站软件
当前位置:建站首页 > 新闻资讯 > 媒体报道 >

南京网站商城建设-网络编程中怎样得知一次数据

发表日期:2021-04-23 04:45文章编辑:jianzhan浏览次数: 标签:    

--------

南京网站商城建设

-------

  2.0做了一个反方向代理商服务器,在这两年時间里,不断改动BUG和优化特性,使得可用性大大提升。近来碰到一个作用要求,确实没法找出合理的处理方法,只好上来求教各位高人。
  先说说反方向代理商的工作中机理吧。
1、顾客端根据访问器浏览反方向代理商的情况下,会传出一个HTTP恳求,反方向代理商收到这个TCP联接的情况下,ept);
2、对话目标创建一个从顾客端接受数据信息的授权委托,刚开始多线程载入数据信息(BeginRead);
3、获得数据信息时,进到多线程载入的回调函数涵数中,刚开始解决数据信息(EndRead);
4、查验反方向代理商与服务器的联接是不是已创建,假如沒有创建,那末需要先创建联接(ConnectServer),并创建服务器的多线程载入授权委托(BeginRead);
5、把数据信息多线程写入服务器(BeginWrite);
6、再次创建顾客端多线程载入授权委托(BeginRead),回到3;
7、收到服务器回到数据信息时,解决后,多线程写入顾客端(BeginWrite);
8、再次创建服务器多线程载入授权委托(BeginRead),回到7;

全部的数据信息传送,都应用多线程来进行,而只需要在3和7处为业务流程编写数据信息解决编码便可。
具体上,针对反方向代理商来讲,只需要解决顾客端发来的数据信息便可以了,需要把HTTP的HOST头更换为真正服务器,而针对服务器响应的数据信息,只需要原样推送给顾客端便可以了。

在流程3中,大家只了解当今收到了顾客端发来的数据信息,而不知道道这个数据信息是否Http恳求头,或是详细的Http恳求头。幸亏,针对反方向代理商来讲,不需要关注是不是是详细的Http恳求头,只需要查验是不是是Http恳求头,假如是,就改动Host便可。在这里,我假定Http恳求的第一个数据信息包毫无疑问是独立的数据信息包,不会“粘”在TCP联接中上一次数据信息的后边,这样便可以立即应用Http协议书要求的文件格式来查验这个数据信息包是不是Http恳求头了。尽管这个假定沒有甚么根据,但它的确十分合理。

程序就这样工作中了两年,沒有甚么难题。

但接下来,难题就出現了,有一个要求,要求可以把服务器回到的网页页面中的某个标识符串更换为特定的标识符串。例如我用反方向代理商指向blog园,我就需要把blog园网页页面中全部应用了肯定相对路径的联接改动为指向反方向代理商服务器的联接。这就要求在流程7这里解决数据信息,把数据信息变为标识符串,随后更换连接,随后才发往顾客端。

但流程7每次收到的数据信息只是一个片断,而并不是全部网页页面的HTML。即便大家再度假定Http响应的第一个数据信息包是独立的数据信息包,也只能鉴别哪些是响应头,哪些是数据信息体罢了。也想过每段数据信息变为这一段的标识符串开展解决,可是,假如恰好某个标识符被互联网层拆分到两个TCP数据信息包里如何办?也有,想blog园这样应用了gzip的,假如不接纳详细个网页页面的数据信息,是没法解压的;就算这两种状况都不存在,而互联网层恰好在超连接的地区拆分数据信息包如何办?

因而,最传统的做法就是拿到全部网页页面数据信息再刚开始解决。也想过Http响应头那里有个Content-Length指明內容长度的,但具体中,许多响应压根就不到这个段。

我查询过HttpListener类和HttpListenerRequest类,尝试从中发现它是怎样接纳完一次恳求(响应)的,可是这两个类启用了很多NativeAPI,就没法获知了。

也有访问器,它又是怎样获知某次响应是不是早已进行的呢?

还请各位高人多多指教!

这个代理商早已放到codeplex上,大伙儿有兴趣爱好能够看看:XProxy/

---------

南京网站商城建设

------------
相关新闻