2014-09-22 16 views
1

tl; dr:有沒有有效的方法來轉換在Java中的一個msgpack和通過HTTP傳輸的C#。如何序列化HTTP上的msgpack

我剛剛發現了msgpack數據格式。我使用JSON幾乎是通過客戶端和服務器(使用HTTP)之間的線路發送的所有內容,所以我很想嘗試這種格式。

我有Java庫和C#庫,但我想通過HTTP傳輸msgpacks。這是預期用途,還是更適合本地格式?

我注意到一些RPC實現,但它們是整個RPC服務器。

想法?

-Shane

回答

1

傳輸和編碼是兩個完全不同的東西,它是完全由你來選擇要使用的運輸和使用什麼數據編碼,具體取決於應用程序的需求。通過HTTP發送msgpack數據是完全有效的使用情況下,這是可能的,但要記住以下兩點:

  1. msgpack是一個二進制編碼,這意味着它需要在發送前要被序列化爲字節,和從另一端的接收字節反序列化。這也意味着它不可讀(或可寫),因此很難檢查(或手動生成)HTTP流量。
  2. 除非您打算通過HTTP進行msgpack編碼的數據,否則會產生相當高的開銷成本,因爲HTTP標頭大小很可能會大大超過您發送的數據大小。請注意,這也適用於JSON,但程度較低,因爲JSON在編碼方面效率不高。

就實現過程而言,發送方必須將您的msgpack對象序列化爲byte[],然後再將其作爲HTTP請求中的請求主體發送。您還需要將HTTP Content-Type設置爲application/x-msgpack。在接收端,從輸入流中讀取請求主體(您可能可以在ByteArrayInputStream上獲取您的手並反序列化到您的msgpack對象中)。

+0

我的擔心是會有一個字節[] - >字符串轉換,這可能抵消了首先使用這種格式的好處。顯然JSON是基於字符串的,所以這不是問題。 – Shane 2014-09-22 08:27:38

相關問題