2009-11-16 57 views
4

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

回答

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

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

+2

是的,我知道,我不知道是否有實現這種網絡協議規範庫。 – 2009-11-16 18:02:38