Binary Data 傳遞問題
最近為了能夠讓檔案從python 透過binary data傳遞到 nodejs上面轉發給所有使用者,為了能夠省掉中間的編碼過程,所以就會需要透過直接傳遞binary data的需求.但也因為這樣,所以會發現一些有趣的事情.
其實核心概念就是要確認是透過binary傳輸還是ascii傳輸而已,接收與傳輸方的溝通都要統一.
場景如下: binary data -> python -> websocket / redis -> nodejs
傳送方掉 bytes 狀況 — websocket
當直接在python 裡面直接將檔案的bytechunk取出的時候,可以順手print是會發現數量沒有問題的.但問題在於,如果我們採用類似websocket-client這類套件傳遞的時候,傻傻的直接用ws.send就會發生掉bytes的狀況,所以這表示他的傳輸模式出了問題.
所以接著關鍵是我們需要去用他的其他的模式,改直接用websocket.create_connection 並且傳遞的時候,直接指定使用send_binary就可以順利的把binary buffer完整傳送出去.就如同底下的做法,非常的簡單.
接收方編碼錯誤狀況 — redis
除了傳送可能出問題之外,接收如果用錯誤的接收方法也是會導致編碼有誤.事實上,在nodejs 的redis 連線設定的時候,就是需要補上一個參數 return_buffers: true
這樣就能順利接收來自binary data的資料.