我有一個扭曲海螺SSH服務器和典型的情形是這樣的:通過OpenSSH客戶端扭海螺 - 流量控制
混帳>> --- WAN1 --- >>扭海螺SVR >> --- WAN2 - >> Git服務器
'git push'會在WAN1上發送數據的速度比我能通過WAN2代理它快,所以我需要告訴客戶端放慢速度(遠在任何TCP數據包之前丟失會導致調整TCP窗口大小)以避免Twisted服務器上的緩衝過多。讀SSH的RFC這是通過不通過調用窗口確認來完成的,這將導致git push在syscall上寫入由openssh支持的管道。我可以通過將localWindowSize設置爲0來完成這一任務,並且飛行數據仍將着陸,因爲230上的謂詞應該仍然存在通過(給localWindowLeft)。我想知道這是否是正確的方法,或者我是否錯過了用Twisted SSH Conch進行流量控制的明顯問題? *
注:我承認有上(通道)方法stopWriting和startWriting佔位符,我可以重寫,所以我有鉤來控制變速器「混帳拉」的另一邊,但林感興趣的另一側。另外IPush/IPull製作者似乎不適用於這個級別,我不知道如何在沒有屠殺海螺的情況下將這些更高級的抽象關聯起來?
「我假設Conch在客戶端收到數據時會調用一個函數,只要不能從該調用中返回,直到可以將數據傳遞到後端服務器爲止?」這不會在生產中作爲Twisted運行在事件循環中,如果我們阻塞數據到達時調用的函數,那麼它將首先刪除使用Twisted的任何好處。雖然我一直在反彈,但我想我會最終遷移到GoLang,在這裏crypto庫公開了一個乾淨的SSH實現,我可以控制這些東西。 –