如何通过http串行化消息包

本文关键字:消息 何通过 http | 更新日期: 2023-09-27 18:23:55

tl;dr:是否有一种高效的方法来转换Java和C#中的消息包,以便通过HTTP进行传输。

我刚刚发现了消息包数据格式。我使用JSON,几乎所有我通过客户端和服务器(使用HTTP)之间的连接发送的东西,所以我很想尝试这种格式。

我有Java库和C#库,但我想通过HTTP传输消息包。这是预期用途,还是更多地用于本地格式?

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

想法?

-Shane

如何通过http串行化消息包

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

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

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