我正在尝试为Ruby做一个交互式的telnet客户端。当前的库非常缺乏,所以我一直在尝试通过创建一个交互式gem来添加它,它允许用户通过telnet实时简化数据。为此,我需要使用多线程:
t1接受用户输入。用户必须始终具有通过整个应用程序输入数据的能力。一旦用户数据被发送,我们将立即接收返回的数据,这些数据将被我们的块{ |c| print c }捕获。问题是我们希望数据对我们来说是流线型的。换句话说,现在我们只得到在我们发送命令后发回的数据,我们希望数据在我们发送命令后一分钟内收到。我们希望数据源源不断地流向我们。
我制作t2就是为了这个目的。t2等待接收数据,然后在匹配其正则表达式模式时显示该数据。t2的问题是,如果从未收到数据,则用户无法在t1中输入信息。
t3可以在t1和t2上运行。我的问题是,我如何组织我的线程,使用户可以不断地在控制台中键入和提交命令,同时不断地从服务器接收信息?
t1 = Thread.new {
while true
input = gets.chomp
localhost.cmd(input) { |c| print c }
end
}
t2 = Thread.new {
puts localhost.waitfor("Prompt" => /[$%#>:?.|](\e\[0?m\s*)* *\z/)
}
t3 = Thread.new {
t1.join
t2.join
}
t3.join发布于 2014-08-11 00:47:35
问题是,我们希望数据对我们来说是流线型的。换句话说,现在我们只能得到在我们发送数据后传回的数据,
require 'thread'
user_data = Queue.new
t1 = Thread.new do
loop do
print "Enter data: "
line = gets.chomp
if line == ""
user_data << "END_OF_DATA"
break
else
user_data << line
end
end
end.join
t2 = Thread.new do
processed_data = []
loop do
line = user_data.shift
break if line == "END_OF_DATA"
processed_data << line
end
p processed_data
end.join你可能想要读这篇文章:
https://stackoverflow.com/questions/25230497
复制相似问题