在Ruby中读取套接字时了解IO.select
发布时间:2020-12-16 19:26:22 所属栏目:百科 来源:网络整理
导读:我有一些我用来从网络套接字获取数据的代码.它工作正常,但我通过反复尝试错过了我的方式.我谦虚地承认我不完全明白它是如何工作的,但我真的很想. (这是我发现的货物培训工作代码) 我不明白的部分以“ready = IO.select …”开头我不清楚: IO.select正在做什
我有一些我用来从网络套接字获取数据的代码.它工作正常,但我通过反复尝试错过了我的方式.我谦虚地承认我不完全明白它是如何工作的,但我真的很想. (这是我发现的货物培训工作代码)
我不明白的部分以“ready = IO.select …”开头我不清楚: > IO.select正在做什么(我尝试查找它,但是与内核混淆甚至更加困惑) 以下是代码: @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 提前感谢帮助我“学会钓鱼”.我讨厌我的代码,我不完全明白 – 这只是巧合的工作. 解决方法
1)IO.select需要一组套接字并等待,直到它们可以读取或写入(或者发生错误).它返回socket发生的事件.
2)数组包含检查事件的套接字.在您的情况下,您只指定插槽进行阅读. 3)IO.select返回一个套接字数组的数组.元素0包含可从中读取的插座,元素1 – 可以写入的套接字和元素2 – 带错误的套接字. 获取套接字列表后,您可以读取数据. 4)是的,recv_nonblock参数是以字节为单位的大小.请注意,实际读取的数据大小可能小于1024,在这种情况下,您可能需要重复选择(如果实际数据对您很重要). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |