GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - hsbt/msgpack-ruby: MessagePack implementation for Ruby / msgpack.org[Ruby]

BranchesTags
Open more actions menu
 
 

Latest commit

 

History

1,438 Commits
1,438 Commits

Folders and files

NameName
Last commit message
Last commit date
doclib
doclib
 
 
ext/msgpack
ext/msgpack
 
 
lib
lib
 
 
spec
spec
 
 
.gitignore
.gitignore
 
 
ChangeLog
ChangeLog
 
 
Gemfile
Gemfile
 
 
README.rdoc
README.rdoc
 
 
Rakefile
Rakefile
 
 
msgpack.gemspec
msgpack.gemspec
 
 
msgpack.org.md
msgpack.org.md
 
 

Repository files navigation

MessagePack

MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON but it’s faster and smaller. For example, small integers (like flags or error code) are encoded into a single byte, and typical short strings only require an extra byte in addition to the strings themselves.

If you ever wished to use JSON for convenience (storing an image with metadata) but could not for technical reasons (binary data, size, speed…), MessagePack is a perfect replacement.

require 'msgpack'
msg = [1,2,3].to_msgpack  #=> "\x93\x01\x02\x03"
MessagePack.unpack(msg)   #=> [1,2,3]

Use RubyGems to install:

gem install msgpack

or build msgpack-ruby and install:

bundle
rake
gem install --local pkg/msgpack

Use cases

  • Create REST API returing MessagePack using Rails + [RABL](github.com/nesquena/rabl)

  • Store objects efficiently serialized by msgpack on memcached or Redis

    • In fact Redis supports msgpack in EVAL-scripts

  • Upload data in efficient format from mobile devices such as smartphones

    • MessagePack works on iPhone/iPad and Android. See also Objective-C and Java implementations

  • Design a portable protocol to communicate with embedded devices

    • Check also Fluentd which is a log collector which uses msgpack for the log format (they say it uses JSON but actually it’s msgpack, which is compatible with JSON)

  • Exchange objects between software components written in different languages

    • You’ll need a flexible but efficient format so that components exchange objects while keeping compatibility

Portability

MessagePack for Ruby should run on x86, ARM, PowerPC, SPARC and other CPU architectures.

And it works with MRI (CRuby) and Rubinius. Patches to improve portability is highly welcomed.

Serializing objects

Use MessagePack.pack or to_msgpack:

require 'msgpack'
msg = MessagePack.pack(obj)  # or
msg = obj.to_msgpack

Streaming serialization

Packer provides advanced API to serialize objects in streaming style:

# serialize a 2-element array [e1, e2]
pk = MessagePack::Packer.new(io)
pk.write_array_header(2).write(e1).write(e2).flush

See API reference for details.

Deserializing objects

Use MessagePack.unpack:

require 'msgpack'
obj = MessagePack.unpack(msg)

Streaming deserialization

Unpacker provides advanced API to deserialize objects in streaming style:

# deserialize objects from an IO
u = MessagePack::Unpacker.new(io)
u.each do |obj|
  # ...
end

or event-driven style which works well with EventMachine:

# event-driven deserialization
def on_read(data)
  @u ||= MessagePack::Unpacker.new
  @u.feed_each(data) {|obj|
     # ...
  }
end

See API reference for details.

Buffer API

MessagePack for Ruby provides a buffer API so that you can read or write data by hand, not via Packer or Unpacker API.

This MessagePack::Buffer is backed with a fixed-length shared memory pool which is very fast for small data (<= 4KB), and has zero-copy capability which significantly affects performance to handle large binary data.

How to build and run tests

Before building msgpack, you need to install bundler and dependencies.

gem install bundler
bundle install

Then, you can run the tasks as follows:

  • Build

    bundle exec rake build
    
  • Run tests

    bundle exec rake spec
    
  • Generating docs

    bundle exec rake doc
    

Copyright

Author

Sadayuki Furuhashi <[email protected]>

Copyright

Copyright © 2008-2013 Sadayuki Furuhashi

License

Apache License, Version 2.0

About

MessagePack implementation for Ruby / msgpack.org[Ruby]

msgpack.org/

Resources

Readme
Activity

Stars

0 stars

Watchers

1 watching

Forks

0 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.