如何通过http序列化msgpack

时间:2014-09-22 04:38:12

标签: java c# msgpack

tl; dr:是否有高效方式转换Java和C#中的 msgpack 以通过HTTP传输。

我刚刚发现了msgpack数据格式。我使用JSON就是我在客户端和服务器之间通过线路发送的所有内容(使用HTTP),所以我很想尝试这种格式。

我有Java库和C#库,但我想通过HTTP传输msgpacks。这是预期用途,还是更适合本地格式?

我注意到了几个RPC实现,但它们是整个RPC服务器。

思想?

-Shane

1 个答案:

答案 0 :(得分:2)

传输和编码是两个截然不同的事情,完全取决于您选择使用哪种传输以及使用哪种数据编码,具体取决于您的应用程序的需求。通过HTTP发送msgpack数据是一个非常有效的用例,它是可能的,但请记住以下两点:

  1. msgpack是一种二进制编码,这意味着它需要在发送之前被串行化为字节,并从另一端的接收字节进行反序列化。这也意味着它不是人类可读的(或者是可写的,因为这很重要),因此很难检查(或手工生成)HTTP流量。
  2. 除非您打算通过HTTP msgpack编码的数据,否则会产生相当高的开销,因为HTTP标头大小很可能会大大超过您的数据大小&# 39;重新发送。请注意,这也适用于JSON,但程度较小,因为JSON的编码效率不高。
  3. 就实现而言,发送方必须将您的msgpack对象序列化为byte[],然后再将其作为HTTP请求中的请求主体发送。您还需要将HTTP Content-Type设置为application/x-msgpack。在接收端,从输入流中读取请求正文(您可能可以使用ByteArrayInputStream并反序列化到您的msgpack对象中。