标签: messagepack

性能实体序列化:BSON与MessagePack(vs JSON)

最近我发现了MessagePack,这是Google的Protocol BuffersJSON的替代二进制序列化格式,它也优于两者.

还有MongoDB用于存储数据的BSON序列化格式.

有人可以详细说明BSON与MessagePack差异和优势吗?


只是为了完成高效的 二进制序列化格式列表:还有Gobs将成为Google协议缓冲区的继承者.然而,与所有其他提到的格式相比,这些格式不是语言无关的,并且依赖于Go的内置反射,至少还有除Go之外的其他语言的Gobs库.

serialization bson deserialization messagepack msgpack

131
推荐指数
4
解决办法
6万
查看次数

MessagePack:快速的跨平台序列化器和RPC - 请分享经验

寻找一些快速,简单和稳定的RPC库我偶然发现了MessagePack项目,这似乎非常好.它也在积极发展.

如果您以任何方式使用它,请与您分享您的经验吗?

PS我认为这个问题应该是社区维基

serialization rpc messagepack msgpack

13
推荐指数
1
解决办法
4245
查看次数

在Android上使用MessagePack

有人试图使用MessagePackAndroid应用吗?
可能吗?我试图使用Jar msgpack-java并收到以下异常:

Caused by: java.lang.ExceptionInInitializerError
  at org.msgpack.Packer.pack(Packer.java:532)
  at org.msgpack.MessagePack.pack(MessagePack.java:31)
  ... 15 more
  Caused by: java.lang.ExceptionInInitializerError
  at org.msgpack.template.TemplateRegistry.<clinit>(TemplateRegistry.java:38)
  ... 17 more
  Caused by: java.lang.VerifyError: org.msgpack.template.BeansFieldEntryReader
  at org.msgpack.template.builder.BeansTemplateBuilder.<init (BeansTemplateBuilder.java:42)
  at org.msgpack.template.builder.BuilderSelectorRegistry.initForJava(BuilderSelectorRegistry.java:73)
  at org.msgpack.template.builder.BuilderSelectorRegistry.<clinit>(BuilderSelectorRegistry.java:38)
  ... 18 more
Run Code Online (Sandbox Code Playgroud)

我使用的代码非常简单

PrintWriter out = new PrintWriter(socket.getOutputStream());
Message msg = new Message();
msg.body = "asdasdasd";
msg.from = "qwe";
msg.to = "ttt";
byte[] bytes = MessagePack.pack(msg);
out.print(bytes);
out.flush();
Run Code Online (Sandbox Code Playgroud)

我有javassist.jar,msgpack-0.5.2.jar,slf4j-api-1.6.2.jarslf4j-jdk14-1.6.2.jar在我的lib目录中.

在我的服务器应用程序中,此代码可以使用相同的库.

java android messagepack msgpack

10
推荐指数
1
解决办法
8407
查看次数

对MessagePack的JavaScript实现的困惑

官方MessagePack页面链接到页面:

但它的最后一次更新是三年前.另一方面,JavaScript中还有其他MessagePack实现,例如:

他们之间有什么不同?哪一个是最正宗的?我应该使用哪一个?

javascript messagepack

9
推荐指数
2
解决办法
6193
查看次数

Apache Avro与Messagepack性能2013

这几天我一直在阅读很多关于Avro和Messagepack的文章.不知道何时使用哪一个.我遇到的一个主要问题是两者在以下指标上的表现差异:

  • 序列化速度
  • 反序列化速度
  • 大小差异(跨相关类型的消息:例如具有不同"开销"比率的消息)

java json avro messagepack

8
推荐指数
0
解决办法
806
查看次数

MessagePack:有效的msgpack结构是否有"语法"?

MessagePack规范可帮助您了解可用的数据类型及其二进制表示.但是,我找不到必须用于构建有效msgpack结构的"语法"的信息(因为它不是文本而是二进制格式,术语"语法"可能不准确).我特别想知道msgpack结构中是否有关于"顶级"元素的要求.这基本上是与JSON 不久前发生的问题类似的问题,尽管JSON的语法是指定的.

使用msgpack,可以在顶层使用基本类型(Int,Boolean ..),还是必须将所有内容封装在地图/数组中?是否有可能在顶层有多个元素(例如,两个数组,不是嵌套,而是"彼此相邻")?

serialization parsing deserialization messagepack

8
推荐指数
0
解决办法
198
查看次数

使用cowboy和MessagePack在websocket上发送二进制数据

我正在尝试通过WebSocket将来自Cowboy的MessagePack编码消息发送到浏览器,并且接收的数据始终为空或无效.我能够将JS中的二进制数据发送给我的牛仔处理程序,但反之亦然.我正在使用Cowboy 1.0.4和官方msgpack-erlang应用程序.我也msgpack-lite用于我的浏览器中的JavaScript.

例子:

websocket_handler:

websocket_handle({text, <<"return encoded">>}, Req, State) ->
    %% sends encoded message to client. Client is unable to decode and fails
    {reply, {binary, msgpack:pack(<<"message">>)}, Req, State};
websocket_handle({binary, Encoded}, Req, State) ->
    %% Works as expected
    lager:info("Received encoded message: ~p", [msgpack:unpack(Encoded)]),
    {ok, Req, State};
Run Code Online (Sandbox Code Playgroud)

JS:

var host = "ws://" + window.location.host + "/websocket";
window.socket = new WebSocket(host);
socket.binaryType = 'arraybuffer';
socket.onmessage = function(event) {
    var message = msgpack.decode(event.data);
    console.log(message);
};
Run Code Online (Sandbox Code Playgroud)

浏览器在msgpack.min.js中返回错误:

Error: Invalid type: …
Run Code Online (Sandbox Code Playgroud)

javascript erlang websocket messagepack cowboy

7
推荐指数
1
解决办法
1609
查看次数

MessagePack比本机node.js JSON慢

我刚安装了node-msgpack并针对原生JSON进行了测试.MessagePack慢得多.谁知道为什么?

使用作者自己的基准......

node ~/node_modules/msgpack/bench.js 
msgpack pack:   4165 ms
msgpack unpack: 1589 ms
json    pack:   1352 ms
json    unpack: 761 ms
Run Code Online (Sandbox Code Playgroud)

node.js messagepack msgpack

6
推荐指数
1
解决办法
6697
查看次数

在Redis中存储MessagePacked哈希

我在Redis中存储MessagePacked哈希时遇到问题.我在下面粘贴了一个测试用例.从Redis中提取打包数据并解压缩时,哈希略有损坏.这似乎发生在哈希值超出一定长度时,尽管我不能肯定地说.

我使用的是Redis 2.4.17(默认配置),Ruby 1.9.3p194,MessagePack 0.4.7和Redis gem 3.0.2.使用节点会发生同样的问题,所以我假设问题出在MessagePack或Redis中.有任何想法吗?

require 'redis'
require 'msgpack'

class Test

  def self.run(url)
    redis = Redis.new
    data = {'number' => 13498935756, 'hash' => {'url' => url}}
    redis.set('my_key', MessagePack.pack(data))

    result = MessagePack.unpack(redis.get('my_key'))
    puts result
    puts result['hash']['url'] == data['hash']['url']
  end

end

Test.run('http://fake.example.com')  # works
=>  {"number"=>13498935756, "hash"=>{"url"=>"http://fake.example.com"}}
=>  true

Test.run('http://fakeurl.example.com')  # does not work
=>  {"number"=>13498935756, "hash"=>{"url"=>"ttp://fakeurl.example.com"}}
=>  false
Run Code Online (Sandbox Code Playgroud)

ruby redis messagepack msgpack

5
推荐指数
1
解决办法
2111
查看次数

使用MSGPACK_DEFINE而不更改类声明

MsgPack C ++中有没有一种方法可以使用MSGPACK_DEFINE而不更改类成员?我们希望将消息包的内容保留在标头之外,而仅在库中内部使用。

似乎只包装每个类都可以,但是希望有更好的方法。

c++ messagepack msgpack

5
推荐指数
1
解决办法
1264
查看次数