带有 "watchdog"的 Ruby 线程

标签 ruby multithreading sockets io

我正在实现一个 ruby​​ 服务器来处理从 GPRS 模块创建的套接字。问题是当模块掉电时,没有迹象表明 socket 已关闭。

我正在做线程来处理同一个服务器的多个套接字。我要问的是:有没有办法在线程内使用计时器,在每次套接字输入后重置它,如果它达到超时,关闭线程?我在哪里可以找到有关此的更多信息?

编辑:未检测到套接字关闭的代码示例

require 'socket'

server = TCPServer.open(41000)
loop do
    Thread.start(server.accept) do |client|
        puts "Client connected"

        begin
            loop do
                line = client.readline

                open('log.txt', 'a') { |f|
                    f.puts line.strip
                }
            end
        rescue
            puts "Client disconnected"
        end
    end
end 

最佳答案

我认为你需要一个心跳机制。

关于带有 "watchdog"的 Ruby 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10039340/

相关文章:

c - 发送在循环中仅工作一次

java - 滞后套接字java

ruby - 有没有办法避免 Ruby 中的重复 block ?

ruby - 从本地存储库安装 ruby​​ gem

c# - Winforms 和后台 worker

c++ - 多线程感知模式下的 BOOST 库

c++ - 在另一个类的成员函数中从成员函数启动线程

ruby-on-rails - ActionView::Template::Error (dyld: Library not loaded:/opt/local/lib/libssl.1.0.0.dylib

ruby-on-rails - 为什么此 create 语句会忽略用于填充数据库记录的值?

c - 使用套接字通过 Tcp/IP 发送消息