j9国际站|(官网)点击登录

新疆j9九游会

本站首页 j9九游会 乐成案例 公司新闻 公司简介 客服中心 软件技能 网站建立
  您如今的地位: 新疆二域j9九游会公司 >> 开辟言语 >> 文章注释

网络编程中怎样得知一次数据曾经收完?

     两年前用.net 2.0做了一个反向署理办事器,在这两年工夫里,不停修正BUG以及优化功能,使得可用性大大进步。迩来遇到一个功效需求,真实无法找出无效的办理措施,只好下去讨教列位高人。
    先说说反向署理的事情机理吧。
1、客户端经过欣赏器拜访反向署理的时分,会收回一个HTTP哀求,反向署理收到这个TCP毗连的时分,创建一个新的会话用于处置这个哀求(BeginAccept、EndAccept);
2、会话工具创建一个从客户端吸收数据的委托,开端异步读取数据(BeginRead);
3、获得数据时,进入异步读取的回调函数中,开端处置数据(EndRead);
4、反省反向署理与办事器的毗连能否已创建,假如没有创建,那么必要先创建毗连(ConnectServer),并创建办事器的异步读取委托(BeginRead);
5、把数据异步写入办事器(BeginWrite);
6、重新创建客户端异步读取委托(BeginRead),回到3;
7、收到办事器前往数据时,处置后,异步写入客户端(BeginWrite);
8、重新创建办事器异步读取委托(BeginRead),回到7;

一切的数据传输,都利用异步来完成,而只必要在3和7处为商业编写数据处置代码即可。
实践上,关于反向署理来说,只必要处置客户端发来的数据就可以了,必要把HTTP的HOST头交换为真实办事器,而关于办事器呼应的数据,只必要原样发送给客户端就可以了。

在步调3中,j9九游会只晓得以后收到了客户端发来的数据,而不晓得这个数据是不是Http哀求头,大概是完备的Http哀求头。幸亏,关于反向署理来说,不必要体贴能否是完备的Http哀求头,只必要反省能否是Http哀求头,假如是,就修正Host即可。在这里,我假定Http哀求的第一个数据包一定是独立的数据包,不会“粘”在TCP毗连中上一次数据的前面,如许就可以间接利用Http协议划定的款式来反省这个数据包能否Http哀求头了。固然这个假定没有什么根据,但它的确十分无效。

步伐就如许事情了两年,没有什么题目。

但接上去,题目就呈现了,有一个需求,要求可以把办事器前往的页面中的某个字符串交换为指定的字符串。好比我用反向署理指向博客园,我就必要把博客园页面中一切利用了相对途径的毗连修正为指向反向署理办事器的毗连。这就要求在步调7这里处置数据,把数据转为字符串,然后交换链接,然后才发往客户端。

但步调7每次收到的数据只是一个片断,而不是整个页面的HTML。即便j9九游会再次假定Http呼应的第一个数据包是独立的数据包,也只能辨认哪些是呼应头,哪些是数据体罢了。也想过每一段数据转为这一段的字符串举行处置,但,假如恰好某个字符被网络层拆分到两个TCP数据包里怎样办?另有,想博客园如许利用了gzip的,假如不承受完备个页面的数据,是无法解压的;就算这两种状况都不存在,而网络层恰好在超链接的地方拆分数据包怎样办?

因而,最守旧的做法便是拿到整个页面数据再开端处置。也想过Http呼应头那边有个Content-Length指明内容长度的,但实践中,许多呼应基本就不到这个段。

我检察过HttpListener类和HttpListenerRequest类,实验从中发明它是怎样承受完一次哀求(呼应)的,惋惜这两个类挪用了少量NativeAPI,就无法得知了。

另有欣赏器,它又是怎样得知某次呼应能否曾经完成的呢?

还请列位高人多多指教!

这个署理曾经放到codeplex上,各人有兴味可以看看:http://www.codeplex.com/XProxy/

作者:复活命 | 文章泉源:cnblogs | 更新>###7:31

  • 上一篇文章:

  • 下一篇文章:

  • 相干文章:
    利用Response.Redirect时ry生效 -asp.net中
    复制SQL 数据库时的题目
    怎样的状况下 可以更新数据
    怎样利用高效数据检索优化SQL Server使用步伐功能
    软件技能
    · 开辟言语
    · Java技能
    · .Net技能
    · 数据库开辟
    最新文章  
    ·搜集整理的asp.net的验证方
    ·种种FOR循环布局的整理
    ·软件项目开辟中应该思索那
    ·搜集整理的javascript sel
    ·j9九游会中项目司理有那些
    ·学习怎样在Lambda表达式进
    ·C++底子知识:布局体数据的
    ·C#完成短信发送步伐的例子
    ·sun近来修补了一局部java的
    ·rss定制的别的一种完成方法
    ·delphi完成使用arp诈骗来实
    ·底子学习:基于WF的流程框
    ·网络编程中怎样得知一次数
    ·怎样逆序输入单链表?
    ·j9九游会历程中的功能设计
    关于j9九游会 | j9九游会 | 下载试用 | 客服中心 | 联系j9九游会 | 相关单位 | 网站舆图 | 新疆电子舆图 | RSS订阅
    版权一切 © 2016 新疆二域j9九游会网 www.k8w.net All Rights Reserved
    新疆j9九游会>###、4811639.
    ### ;>###华联大厦A-5C 邮编:830000