一个简单的TCP消息协议?

时间:2009-11-16 16:42:42

标签: ruby

我希望通过TCP在Ruby进程之间发送消息,而不使用可能限制潜在消息内容的结束字符。这排除了天真的socket.puts / gets方法。 在标准库中的某处是否有基本的TCP消息实现? (我想避免让Drb保持简单。)

2 个答案:

答案 0 :(得分:6)

似乎没有规范,可重复使用的解决方案。

所以这是档案的基本实现:

module Messaging
  # Assumes 'msg' is single-byte encoded 
  # and not larger than 4,3 GB ((2**(4*8)-1) bytes)
  def dispatch(msg)
    write([msg.length].pack('N') + msg)
  end

  def receive
    if (message_size = read(4)) # sizeof (N)
      message_size = message_size.unpack('N')[0] 
      read(message_size)
    end
  end
end

# usage
message_hub = TCPSocket.new('localhost', 1234).extend(Messaging)

答案 1 :(得分:1)

在这种情况下发送字符串的常用方法是发送一个整数(无论你喜欢编码)的字符串大小,然后是那么多字节。您可以节省空间,但仍然可以通过对该整数使用类似UTF-8的方案来允许任意大小。