Ssh
HTTP over SSH 隧道:如何組織影片文件的下載和播放?
我有兩台伺服器,我們稱它們
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。
因此,經過一番調查,我們設法找到了解決方案;我相信我應該把它放在這裡給那些以後會用Google搜尋的人。
我最初的假設是錯誤的;問題不在於 ssh 隧道本身。
在我們的程式碼中,Python 庫
paramiko
已用於建立隧道。並且要麼我們以錯誤的方式使用它,要麼paramiko
有一些內部錯誤 - 但我們發現當我們通過呼叫send
方法通過隧道發送數據時paramiko.channel.Channel
,我們嘗試發送的影片文件的最後部分在輸出中失去了。改變send
以sendall
解決問題。