我在使用.Net TcpClient/Sockets编写HTTP客户端。.Net C#TcpClient/Socket HTTP客户端性能/效率
到目前为止,客户端通过遍历NetworkStream响应(在向TcpClient写入GET请求之后),解析报头并检索相关消息体字节/分块字节来处理Content-Length和分块响应。为此,它使用NetworkStream ReadByte方法。
这一切工作正常,但性能是应用程序的一个关键考虑因素,所以我想尽可能快速和高效。
最初,这将涉及将ReadByte替换为邮件正文(基于Content-Length)的Read或分块邮件正文字节检索到适当大小的缓冲区中,在所有其他区域中使用ReadByte(例如,读取Headers,Chunk大小等等)。
我很想知道更好的/不同的方式来达到最佳性能的想法吗?显然,HTTP的主要问题是不知道响应流的长度,除非它在检索时被解析。
有一个具体的原因,为什么我没有使用更多的抽象类(例如HttpWebRequest)(我需要在套接字级更好的控制)。
非常感谢,
克里斯
顺便说一句我很好奇 - 你提到你需要对Socket/Connection进行细粒度的控制,这就是为什么你不使用HttpWebRequest。你能告诉我们那些原因吗? – feroze 2009-12-02 01:58:06
我想模拟一个数字(可以说200个)Web客户端,并且要做到这一点我希望每个客户端都作为一个线程来管理自己的连接,在多个不同请求期间保持打开状态,暂停等等。客户端将达到相同的终点(与标准负载测试工具非常相似的功能)。 我不相信HttpWebRequest可以实现这一点,因为连接是通过服务点来处理的,该服务点可以停止这种粒度控制级别? – Chris 2009-12-02 11:46:40
对不起,我还应该说我需要捕获的信息,如第一个字节的时间,重新连接数等... – Chris 2009-12-02 12:11:44