簡體   English   中英

一個簡單的TCP消息協議?

[英]A simple TCP messaging protocol?

我想通過TCP在Ruby進程之間發送消息,而不使用可能限制潛在消息內容的結束字符。 這排除了天真的socket.puts / gets方法。 在標准庫中的某處是否有基本的TCP消息實現? (我想避免讓Drb保持簡單。)

似乎沒有規范,可重用的解決方案。

所以這是檔案的基本實現:

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)

在這種情況下發送字符串的通常方法是發送一個整數(你喜歡編碼)的字符串大小,然后是那么多字節。 您可以通過對該整數使用類似UTF-8的方案來節省空間但仍允許任意大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM