【问题标题】:How to serialise msgpack over http如何通过 http 序列化 msgpack
【发布时间】:2014-09-22 04:38:12
【问题描述】:

tl;dr:有没有一种有效的方法来转换 Java 和 C# 中的 msgpack 以通过 HTTP 传输。

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

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

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

想法?

-肖恩

【问题讨论】:

    标签: java c# msgpack


    【解决方案1】:

    传输和编码是两个非常不同的东西,完全取决于您选择使用哪种传输方式和使用哪种数据编码方式,具体取决于您的应用程序的需要。通过 HTTP 发送 msgpack 数据是一个完全有效的用例并且是可能的,但请记住以下两点:

    1. msgpack是二进制编码,也就是说发送前需要序列化成字节,另一端接收到的字节反序列化。这也意味着它不是人类可读的(或可写的),因此很难检查(或手动生成)HTTP 流量。
    2. 除非您打算通过 HTTP 流式传输 msgpack 编码的数据,否则您会产生相当高的开销成本,因为 HTTP 标头大小很可能会大大掩盖您发送的数据的大小.请注意,这也适用于 JSON,但程度较小,因为 JSON 在编码方面效率不高。

    就实现而言,发送方必须先将您的 msgpack 对象序列化为 byte[],然后再将其作为 HTTP 请求中的请求正文发送。您还需要将 HTTP Content-Type 设置为 application/x-msgpack。在接收端,从输入流中读取请求正文(您可能可以使用ByteArrayInputStream 并反序列化到您的 msgpack 对象中)。

    【讨论】:

    • 我担心会有一个 bytes[] -> 字符串转换,这可能会抵消首先使用这种格式的好处。显然 JSON 是基于字符串的,所以这不是问题。
    猜你喜欢
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多