我有两台服务器,我们称它们为website.com
和file_storage.com
。 (它们可能位于两台物理上不同的机器上,或者只是一台服务器上的不同 Docker 容器。)
file_storage.com
服务器存储一些视频文件;website.com
服务器有一个功能,允许使用其中一些文件创建播放列表并播放此播放列表。为了访问这些文件,我有两个选项(两者都应该有效):
- 在服务器上配置 Nginx
file_storage.com
,允许通过类似 的链接接收文件"http://file_storage.com:8081/"
。 - 服务器之间的 SSH 隧道,允许
file_storage
通过类似这样的链接从服务器接收文件"http://website.com:9001/"
。
现在,当我直接访问时file_storage.com
,一切都正常:播放列表播放顺畅,下载和播放单个视频文件没有问题。
但是当我尝试使用隧道创建播放列表时,它无法正常工作。视频可能看起来已损坏,或者播放速度比实际速度快,或者播放列表在播放某些视频后可能卡住并且无法继续播放。
所以,我想知道:当我尝试通过隧道播放/下载视频时,我可以检查什么来找出出了什么问题?
补充说明:我们还有一个通过此类隧道播放视频流的功能,它不会出现此类问题。但对于流,这个问题已通过强制tcp
使用协议(它们udp
默认使用)得到解决。因此,它不应该适用于文件问题,因为它们已经在使用 tcp。
答案1
因此,经过一番调查,我们终于找到了解决方案;我相信我应该把它放在这里,以便以后用谷歌搜索这个问题的人可以找到。
我最初的假设是错误的;问题不在于 ssh 隧道本身。
在我们的代码中,Python 库paramiko
已用于建立隧道。我们要么使用错误的方式,要么存在一些内部错误 - 但我们发现,当我们通过调用方法paramiko
通过隧道发送数据时,我们尝试发送的视频文件的最后部分在输出中丢失。更改为解决了该问题。send
paramiko.channel.Channel
send
sendall