gpt4 book ai didi

.net - 如何防止 HttpWebRequest 的数据包碎片

转载 作者:行者123 更新时间:2023-12-03 11:49:24 24 4
gpt4 key购买 nike

我在对嵌入式设备上的 HTTP 守护程序使用 HttpWebRequest 时遇到问题。问题似乎是在写入套接字流的 http header 和 http 有效负载(POST)之间有足够的延迟,套接字将套接字缓冲区中的内容释放到服务器。这导致 HTTP 请求被拆分为两个数据包(分段)。

当然,这是完全有效的,但是如果数据包拆分超过大约 1.8 毫秒,另一端的服务器将无法处理它。所以我想知道是否有任何现实的方法来控制这个(在客户端)。

HttpWebRequest 上似乎没有任何属性可以对用于发送的套接字进行这种级别的控制,并且似乎无法访问套接字本身(即通过反射),因为它仅在发送期间创建,并且之后发布(作为出站 http 连接池的一部分)。 BufferWriteStream 属性只是缓冲 webrequest 中的正文内容(因此它仍然可用于重定向等...),并且似乎不会影响整个请求写入套接字的方式。

那么该怎么办?

(我真的试图避免从套接字重新编写 HTTP 客户端)

一种选择可能是编写 HttpWebRequest 发送到的某种代理(可能通过 ServicePoint),并在该实现中缓冲整个 TCP 请求。但这似乎是一项艰巨的工作。

当我运行 Fidder 时它也能正常工作(出于同样的原因),但这在我们的生产环境中并不是一个真正的选择......

[ps:我知道这绝对是问题所在的分段数据包之间的间隔,因为我进行了套接字级别的测试,在该测试中我使用 NoDelay 套接字明确控制了分段]

最佳答案

最后,供应商推出了包含新版本 HTTPD 的固件升级,问题消失了。他们使用的是 BusyBox linux,显然他们遇到的 HTTPD 实现还有一些其他问题。

就我原来的问题而言,我认为没有 任何 除了编写套接字代理之外,还有一种可靠的方法。我在上面使用的一些解决方法靠运气而不是设计(因为它们意味着 .net 一次性发送了整个数据包)。

关于.net - 如何防止 HttpWebRequest 的数据包碎片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2205566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com