繁体   English   中英

.Net C#TcpClient /套接字HTTP客户端性能/效率

[英].Net C# TcpClient / Socket HTTP Client Performance / Efficiency

我正在使用.Net TcpClient /套接字编写HTTP客户端。

到目前为止,客户端通过遍历NetworkStream响应(在将GET请求写入TcpClient之后),解析标头并检索相关的消息正文字节/分块字节,来处理Content-Length和分块响应。 为此,它使用NetworkStream ReadByte方法。

一切正常,但是性能是应用程序的关键考虑因素,因此我想使其尽可能快和高效。

最初,这涉及到将消息正文(基于Content-Length)交换为ReadRead的ReadByte或将分块的消息正文字节检索到适当大小的缓冲区中,并在所有其他区域中使用ReadByte(例如读取标头,块大小等)。

我很想知道关于更好/不同方式实现最佳性能的想法? 显然,HTTP的主要问题是不知道响应流的长度,除非在检索响应流时对其进行解析。

有一个特定的原因为什么我不为此使用更多抽象类(例如HttpWebRequest)(我需要在套接字级别进行更好的控制)。

非常感谢,

克里斯

我建议使用带有中等大小缓冲区的进程。 重复填充缓冲区,直到响应流结束。 当缓冲区已满或流结束时,请将缓冲区内容附加到字符串(或用于存储消息的任何内容)上。

如果您想在流中尽早阅读重要的信息,请阅读流中足够的内容以查看相关信息。 (换句话说,如果您不想这样做,则不需要在第一遍填充缓冲区。)

您还应该考虑使用事件系统来表示新数据的存在,新数据的形成方式使您的流程的主要部分不需要了解数据的来源或缓冲方式。

编辑

为了回应您的评论问题,如果您尝试将一个连接重用于多个请求,则将创建一个线程,反复读取该线程。 找到数据后,它将使用事件将其推出,以供程序的主要部分处理。 我没有样本方便,但是您应该可以通过bing或google搜索找到一些样本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM