簡體   English   中英

可以在HTTP協議中模擬流控制嗎? (原始HTTP協議)

[英]Possible to emulate flow control in HTTP protocol ? (raw HTTP protocol)

我在客戶處有數百個硬件設備,它們需要通過telnet接口發送HTTP數據。
目標是帶有PHP腳本Apache 2 Web服務器,等待數據。

這已經在起作用,但是我們發現所涉及的硬件無法處理硬件流控制,這意味着一旦數據被填充(大約250個字節),緩沖區就會溢出,從而導致數據損壞。
修復HW流程不是一種選擇,“調制解調器”固件已關閉,並且由於廠商的硬件已相當舊而無法再進行修改。

通常,我們將使用以下代碼:

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個字節后,緩沖區將被覆蓋,並且某些字節會丟失。
現在使它工作的唯一當前方法是在發送到“調制解調器”時使用延遲,以便它可以及時清空其緩沖區。 但是,由於不穩定的Internet連接和不可預測的時間,因此在現場無法使用。

我不是HTTP方面的專家,我只是希望可以對包進行分段。
我考慮過使用"Connection: keep-alive"或類似的方法。

我的主要問題:
有沒有一種方法可以將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流進行響應。
下一塊發送:

VARIABLE=URLENCODED_DATA(200 bytes)

連接已關閉。
達到400字節后,過程准備就緒,Apache將VARIABLE轉發到PHP腳本POST輸入。

就像打開TCP連接中的HTTP流控制一樣。
也許有一個為此目的而構建的HTTP功能,或者可以“濫用”這種功能。 保持活躍只是一個猜測。

如果當前的HTTP協議沒有這樣的功能,那么我想解決問題的唯一方法就是在PHP端實現流控制。
我希望有一個更好的方法。

更新:同時,我發現了兩個有趣的參數:期望:100連續傳輸編碼:分塊

我需要的是兩者兼而有之。 分塊傳輸編碼,每個分塊后面期望有100個連續!

這是一個非常有趣的問題,它與HTTP無關,而與TCP無關。

解決此問題的方法是使用中介代理,以中介方式喂養您的設備。 理想情況下,此設備將能夠將TCP數據包ACK上的窗口大小設置為該設備的緩沖區大小。 當設備無法再處理時,該窗口大小將接近於零。 如果這樣做,您將利用TCP的內置流控制並以簡單的方式解決問題。

您可以做的另一件事是將其完全保留在應用程序層中,並使此中間代理緩沖來自響應的所有數據。 對於大多數普通的HTTP響應,這是可以的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM