我有一个 Twisted Conch SSH 服务器,典型的场景是这样的:
git 通过 OpenSSH 客户端 >>--- WAN1 --->> Twisted conch svr >>--- WAN2 -->> Git 服务器
有时,“git push”通过 WAN1 发送数据的速度比我通过 WAN2 代理它的速度要快,所以我需要告诉客户端放慢速度(在任何 TCP 数据包丢失导致调整 TCP 窗口大小之前)以避免在 Twisted 服务器上缓冲过多。读取 SSH 的 RFC 是在不通过 adj 窗口确认的情况下完成的,这将导致 git push 阻止系统调用写入由 openssh 支持的管道。
查看方法 def ssh_CHANNEL_DATA(self, packet) 中的 conch/ssh/connection.py:L216:我可以通过将 localWindowSize 设置为 0 来完成此操作,并且飞行数据仍将着陆,因为 230 上的谓词仍应通过(给定 localWindowLeft) . 我想知道这是否是正确的方法,还是我错过了关于使用 Twisted SSH Conch 进行流量控制的一些明显的东西?*
注意:我承认我可以覆盖(通道)上的 stopWriting 和 startWriting 方法占位符,因此我有钩子来控制传输“git pull”的另一端,但我对另一端感兴趣。此外,IPush/IPull 生产者似乎不适用于这个级别,我看不出如何在不屠杀海螺的情况下将这些更高的抽象联系起来?