许多客户端连接Ruby
问题描述:
基本上,我们有大量(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