基本上,我們有大量(100多個)遠程嵌入式設備,我們需要從中傳輸數據。許多客戶端連接Ruby
我可以連接到下面的代碼的任何單個遠程主機:
require 'socket'
socket = TCPSocket.new '192.168.1.115', 8016
loop do
socket.write("GET_DATA")
data = socket.read(32)
end
s.close
但我想連接到許多人的一次。有推薦的方法嗎?
基本上,我們有大量(100多個)遠程嵌入式設備,我們需要從中傳輸數據。許多客戶端連接Ruby
我可以連接到下面的代碼的任何單個遠程主機:
require 'socket'
socket = TCPSocket.new '192.168.1.115', 8016
loop do
socket.write("GET_DATA")
data = socket.read(32)
end
s.close
但我想連接到許多人的一次。有推薦的方法嗎?
使用線程:
ips = ['192.168.1.115', '...', '...']
threads = []
ips.each do |ip|
threads << Thread.new do
# Connect here, do some stuff with the socket
end
end
threads.each { |t| t.join }
需要注意的是,如果你想真正的線程,你應該使用的JRuby或Ruby> = 1.9時,MRI紅寶石< 1.9(標準紅寶石)線程實現模擬線程(green threads),和只有當一個線程正在等待I/O時才進行真正的線程化。
當你說「一次」,你的意思是異步嗎?如果是這樣,請啓動[在新線程中]的每個連接(http://ruby-doc.org/core-2.0/Thread.html)。 – 2013-03-12 16:22:07