Twisted Conch SSH サーバーがあり、典型的なシナリオは次のとおりです。
OpenSSH クライアント経由の git >>--- WAN1 --->> Twisted conch svr >>--- WAN2 -->> Git サーバー
「git push」が WAN2 経由でプロキシできるよりも WAN1 経由でデータを高速に送信する場合があるため、クライアントに速度を落とすように指示する必要があります (TCP パケット損失によって TCP ウィンドウ サイズが調整される前に) 回避する必要があります。 Twisted サーバーでのバッファリングが多すぎます。SSH の RFC を読むと、adj ウィンドウを介して確認しないことで達成されます。これにより、openssh によってバックアップされたパイプへの syscall 書き込みで git push がブロックされます。
メソッド def ssh_CHANNEL_DATA(self, packet) の conch/ssh/connection.py:L216 を見ると、localWindowSize を 0 に設定することでこれを達成できます。また、230 の述語がまだ渡される必要があるため、飛行中のデータは引き続き着陸します (localWindowLeft を与えます)。 . これが正しいアプローチなのか、それとも Twisted SSH Conch を使用したフロー制御に関して盲目的に明らかな何かを見逃しているのでしょうか? *
注: (チャネル) で stopWriting と startWriting のメソッド プレースホルダーが存在することを認めます。これをオーバーライドできるので、送信の反対側の「git pull」を制御するフックがありますが、反対側に興味があります。また、IPush/IPull プロデューサーはこのレベルでは適用できないようです。また、コンチを解体せずにこれらのより高い抽象化を結び付ける方法がわかりませんか?