当前测试 WinSCP 通过P2P远程访问webdav服务器,网络框架如下:
WinSCP --> p2p tunnel client --> p2p tunnel server --> remote webdav server
就是本地 WinSCP 通过 p2p tunnel隧道,访问远端的 webdav server;
当前,遇到一个问题,就是WinSCP上传一个小文件的时候,WinSCP 客户端出现 socket 连接异常超时。
具体分析如下:
1. WinSCP 执行 PUT 操作,上传一个文件;
2. WinSCP 执行 PUT 操作,发送给 p2p tunnel client; 那么,p2p tunnel client为了提供通信效率,分配一个大缓存 send buffer;
此时,p2p tunnel client 快速接收 WinSCP 的PUT操作;
3. WinSCP 上传一个小文件,只需要1秒钟,就可以上传完数据。其实,这个数据没有传输到 远端 remote webdav server;
此时,存储本地 P2P tunnel client;
那么,WinSCP 就等待3秒钟左右,没有收到 webdav 协议数据包,就认为 socket 连接异常。
针对这个情况,无法改变WinSCP。就考虑增加一个 webdav agent 代理,如下:
WinSCP --> local webdav server agent --> p2p tunnel client --> p2p tunnel server --> remote webdav server
增加一个 local webdav server agent 本地的 webdasv 代理。
那么,WinSCP 发送数据,发送给本地 local webdav server agent;
例如,执行 PUT 上传文件,就上传给 local webdav server agent,此时,local webdav server agent 执行2个操作:
1. 把数据转发给 p2p tunnel client;
2. 给WinSCP 返回 http 102 状态码,表示请求还在继续运行;
这样就解决WinSCP无法及时获取 webdav server 返回数据,提示连接超时异常。
但是,由于增加了 local webdav server agent 节点,也导致通信速率下降。
有好办法的同学,也帮忙给点意见,谢谢了哈