【问题标题】:'Who's online?' Ruby Network Program'谁在线上?'红宝石网络计划
【发布时间】:2009-08-04 08:16:44
【问题描述】:

我有几个嵌入式 linux 系统,我想写一个“谁在线?” Ruby 中的网络服务。以下是我的代码的相关部分:

mySocket = UDPSocket.new
mySocket.bind("<broadcast>", 50050)
loop do
    begin
        text, sender = mySocket.recvfrom(1024)
        puts text
        if text =~ /KNOCK KNOCK/ then   
            begin
                sock = UDPSocket.open
                sock.send(r.ipaddress, 0, sender[3], 50051)
                sock.close
            rescue
                retry
            end             
        end
    rescue Exception => inLoopEx
        puts inLoopEx.message
        puts inLoopEx.backtrace.inspect
        retry
    end
end

我从 PC 发送“KNOCK KNOCK”命令。现在,问题是因为他们都同时收到消息,他们也尝试同时响应,这导致了 Broken Pipe 异常(这是我的“救援重试”代码的原因)。此代码有时可以正常工作,但是;其他时候,代码的救援重试部分(由 sock.send 的 Broken Pipe 异常唤醒)会导致一个或多个系统在 5 秒左右后响应。

既然我认为我无法逃脱 Broken Pipe 异常,有没有更好的方法来做到这一点?

【问题讨论】:

    标签: ruby networking sockets udp


    【解决方案1】:

    我发现异常是由发送命令中的'r.ipaddress'部分引起的,这与我的嵌入式系统内部有关......

    【讨论】:

      猜你喜欢
      • 2011-07-22
      • 2011-04-15
      • 2018-10-30
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多