我有一些代码用于从网络套接字获取数据。它工作正常,但我通过反复试验挫败了自己的想法。我虚心承认,我不完全理解它是如何工作的,但我真的很想。 (这是货物culted形式运行的代码,我发现)在Ruby中读取套接字时了解IO.select
我不明白以“准备= IO.select ......”开始的部分我不清楚在:
- 什么IO.select是做(我试图寻找它,但得到更加混乱与内核和什么,而不是)
- 什么数组变量IO.select是
- 什么就绪[0]做
- 的总体思路读取1024个字节?同时
下面的代码:
@mysocket = TCPSocket.new('192.168.1.1', 9761)
th = Thread.new do
while true
ready = IO.select([@mysocket])
readable = ready[0]
readable.each do |socket|
if socket == @mysocket
buf = @mysocket.recv_nonblock(1024)
if buf.length == 0
puts "The server connection is dead. Exiting."
exit
else
puts "Received a message"
end
end
end
end
end
预先感谢帮助我“学会鱼”。我讨厌我的代码片断,我不完全理解 - 这只是巧合。
但是,为什么使用新的线程?那有什么优点和缺点? – DiegoSalazar 2012-07-27 22:33:48
我跑了这个例子,在里面放了一堆'puts',并且不明白为什么程序永远不会进入'while true'循环(或者可能是'puts'输出在循环内部永远不会到达控制台?) – Paul 2014-05-26 13:57:39