References
-
Streaming - Streaming unpacker concepts
-
Buffer management - Buffer IO integration
Working with files
Writing to files
data = { name: "Alice", items: [1, 2, 3] }
# Pack and write
File.open("output.msgpack", "wb") do |file|
packed = Messagepack.pack(data)
file.write(packed)
end
# Or use pack with IO directly
File.open("output.msgpack", "wb") do |file|
Messagepack.pack(data, file)
endNetwork streaming
TCP server example
require 'socket'
require 'messagepack'
server = TCPServer.new(2000)
loop do
client = server.accept
unpacker = Messagepack::Unpacker.new(client)
while obj = unpacker.read
# Process each message
response = handle_message(obj)
# Send response
packed = Messagepack.pack(response)
client.write(packed)
end
client.close
endTCP client example
require 'socket'
require 'messagepack'
socket = TCPSocket.new('localhost', 2000)
# Send request
request = { action: "ping", data: "hello" }
socket.write(Messagepack.pack(request))
# Read response
unpacker = Messagepack::Unpacker.new(socket)
response = unpacker.read
puts response.inspect
socket.closeHTTP streaming
require 'net/http'
require 'messagepack'
uri = URI('http://example.com/stream')
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
http.request(request) do |response|
unpacker = Messagepack::Unpacker.new
response.read_body do |chunk|
unpacker.feed(chunk)
while obj = unpacker.read
process(obj)
end
end
endWebSocket streaming
# Using websocket-client-simple gem
require 'websocket-client-simple'
require 'messagepack'
ws = WebSocket::Client::Simple.connect('ws://example.com/stream')
unpacker = Messagepack::Unpacker.new
ws.on :message do |msg|
unpacker.feed(msg.data)
while obj = unpacker.read
puts "Received: #{obj.inspect}"
end
end
ws.on :open do
# Send MessagePack data
ws.send(Messagepack.pack({type: "subscribe", channel: "updates"}))
endError handling
Handling incomplete data
unpacker = Messagepack::Unpacker.new
unpacker.feed(partial_data)
obj = unpacker.read
if obj
puts "Got object: #{obj.inspect}"
else
puts "Need more data"
end