gpt4 book ai didi

c# - 如何连接但等待使用 HttpWebRequest 发送任何 header ?

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:56 26 4
gpt4 key购买 nike

我想发出 https 请求,但我想先启动连接而不发送 header ,甚至是 GET/something/HTTP/1.1 部分。换句话说,我想保持连接就绪,并在完成后立即发送所有内容。

我会使用简单的 TCP/IP 来完成此操作,但我有 some issues with it此刻。

我试过 SendChunked 属性,但它只发送要发布的部分数据。

编辑:更清楚地说,我想要的是:

  • 连接IP
  • 创建 SSL 流和 AuthenticateAsClient
  • 等待信号
  • 现在发送网络请求

waiting的部分我已经练习过了,就不用再详细解释了。

最佳答案

简答

HttpWebRequest 不公开允许在发出请求之前预热连接的接口(interface)。

动机

有人想要这样做的原因是因为打开 TCP 连接需要发起者在发送任何数据之前等待一个 RTT,并且因为 HTTPS 可能需要另一个 RTT 等待来执行 key 交换。

如果从客户端到数据中心的 RTT 为 50 毫秒,那么像这样预热连接可以将发送简单请求所需的时间从 125 毫秒缩短(发送请求需要 2.5 个 RTT,但不是得到响应)到 25 毫秒(0.5 RTTs 发送请求,但没有得到响应)。减少了 80%。

替代方案

无需编写您自己的 Http 客户端或使用 HttpWebRequest 以外的其他东西,就可以实现这种减少,但在某些情况下,它必须等待。

一般技术是依靠 HTTP 1.1 重新使用连接(也称为保持事件状态)通过现有 TCP 套接字/SSL session 发送请求。

先决条件:您需要知道您正在调用的网络服务器的保持事件时间间隔。 60 秒是非常典型的,但不要假设,使用 Fiddler 观察它,或者检查服务器和负载均衡器上的设置(如果您有权访问它们)。

假设保持事件时间间隔为 60 秒。创建一个 HttpWebRequest 并将一个请求发送到一个“ping”url(即使是一个不存在的文件......连接应该仍然不会在 404 响应时关闭,除非服务器配置错误)。在小于保持事件间隔的某个时间间隔(例如每 55 秒)再次重新发送请求。当你想向服务器发送请求时,你需要等待你拥有的单个 HttpWebRequest 周围的锁。当锁定可用而无需等待时,您的请求通常会立即通过现有的 TCP 套接字和 SSL session 。在 HttpWebRequest 被锁定的极少数情况下,您将不得不等待最多 1 个 RTT 才能将其释放(平均而言,您将等待 0.5 个 RTT,当它被锁定时,这种情况很少见,因为请求有可能已经已经在线上发送,响应也可能已经在线上了)。

此解决方案不能保证套接字将保持事件状态,但它会工作得很好。

不是讽刺,但如果性能如此重要,您可能不应该使用 HTTP 和/或担心编写或使用非 HttpWebRequest 客户端。

关于c# - 如何连接但等待使用 HttpWebRequest 发送任何 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23344228/

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