Binary Data 傳遞問題

aha (Cheng-Yu Lin)
3 min readOct 4, 2019

--

左邊是接收,右邊是發送

最近為了能夠讓檔案從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-client的範例碼

所以接著關鍵是我們需要去用他的其他的模式,改直接用websocket.create_connection 並且傳遞的時候,直接指定使用send_binary就可以順利的把binary buffer完整傳送出去.就如同底下的做法,非常的簡單.

接收方編碼錯誤狀況 — redis

除了傳送可能出問題之外,接收如果用錯誤的接收方法也是會導致編碼有誤.事實上,在nodejs 的redis 連線設定的時候,就是需要補上一個參數 return_buffers: true

這樣就能順利接收來自binary data的資料.

--

--

aha (Cheng-Yu Lin)
aha (Cheng-Yu Lin)

Written by aha (Cheng-Yu Lin)

Passionate about reading, gaming, and travel. Using AI to connect the physical & virtual worlds, I enjoy sharing ideas with others. Let's connect!

Responses (1)