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的資料.

--

--

aha 專長於組裝各式語言與各大平台服務,打造最小可行產品原型.曾獲得2011 政府開放資料平台App社會組首獎.2015 PIXNET Mobile Service社會組首獎.2014 DSC R 課程講師.2017pycon與2017 DSC講者,2022 法律x法遵黑客松第三名。

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Cheng-Yu Lin

Cheng-Yu Lin

aha 專長於組裝各式語言與各大平台服務,打造最小可行產品原型.曾獲得2011 政府開放資料平台App社會組首獎.2015 PIXNET Mobile Service社會組首獎.2014 DSC R 課程講師.2017pycon與2017 DSC講者,2022 法律x法遵黑客松第三名。