gpt4 book ai didi

apache - 可以模拟 HTTP 协议(protocol)中的流量控制吗? (原始 HTTP 协议(protocol))

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:07:21 28 4
gpt4 key购买 nike

我在客户那里有数百个硬件设备,需要通过telnet接口(interface)发送HTTP数据。
目标是等待数据的 Apache 2 Web 服务器和 PHP 脚本

这已经可以正常工作了,但是我们发现所涉及的硬件无法处理 hw-flow-control,这意味着一旦数据被填满(大约 250 字节),缓冲区就会溢出,从而导致数据损坏。
修复 HW-flow 不是一个选项,“调制解调器”固件已关闭并且供应商不能再修改,因为它是相当旧的硬件。

通常我们会使用这个:

POST / HTTP/1.1
Host: api.server
User-Agent: P8
Content-Type: application/x-www-form-urlencoded
Accept: */*
Content-Length: 767

VARIABLE=URLENCODED_DATA(total length 767 bytes)

这在流量控制下可以很好地工作,但在我的情况下,767 字节太多了。
大约 200 字节后,缓冲区将被覆盖并丢失一些字节。
现在让它工作的唯一当前方法是在发送到“调制解调器”时使用延迟,以便它可以及时清空缓冲区。然而在现场,由于不稳定的互联网连接和不可预测的时间,这将行不通。

我不是 HTTP 专家,我只是希望可以对包进行分片。
我考虑过使用 "Connection: keep-alive" 或类似的东西。

我的主要问题:
有没有办法以较小的 block 将 POST 数据($VARIABLE)发送到 Apache 2 服务器,使 HTTP 服务器在内部将它们组合成一个流?

伪代码:

POST / HTTP/1.1
Host: api.server
User-Agent: P8
Content-Type: application/x-www-form-urlencoded
Accept: */*
Content-Length: 400
Connection: keep-alive

VARIABLE=URLENCODED_DATA(200 bytes)
END\n\n

服务器在收到 “OK” 后在 TCP 流中做出响应。
发送下一个 block :

VARIABLE=URLENCODED_DATA(200 bytes)

连接已关闭。
当达到 400 字节时,进程准备就绪,Apache 将 VARIABLE 转发给 PHP 脚本 POST 输入。

就像在开放的 TCP 连接中的 HTTP 流量控制。
也许有一个为此目的而构建的 HTTP 功能,或者可以“滥用”用于以这种方式运行的东西。 keep-alive 只是一个猜测。

如果当前的 HTTP 协议(protocol)没有这样的功能,我可以考虑解决我的问题的唯一方法是在 PHP 端实现流量控制。
我希望有比这更好的方法。

更新:同时我发现了两个有趣的参数:期望:100-继续传输编码:分块

我需要的是两者的结合。一个分块传输编码,期望在每个 block 之后有一个 100-continue !

最佳答案

这是一个非常有趣的问题,它确实与 HTTP 无关,而是与 TCP 相关。

解决这个问题的方法是使用一个中间代理来处理你的设备。理想情况下,此设备将能够将 TCP 数据包 ACK 上的窗口大小设置为设备缓冲区的大小。当设备无法再处理时,该窗口大小将接近于零。如果这样做,您将利用 TCP 的内置流量控制并以简单的方式解决问题。

您可以做的另一件事是将其完全保留在应用程序层中,并让这个中间代理缓冲响应中的所有数据。对于大多数正常的 HTTP 响应,这是可以的。

关于apache - 可以模拟 HTTP 协议(protocol)中的流量控制吗? (原始 HTTP 协议(protocol)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29674238/

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