1

GPRSモジュールから作成されたソケットを処理するためのrubyサーバーを実装しています。重要なのは、モジュールの電源がオフになっても、ソケットが閉じていることを示すものがないということです。

同じサーバーで複数のソケットを処理するスレッドを実行しています。私が求めているのはこれです:スレッド内でタイマーを使用し、ソケット入力のたびにタイマーをリセットし、タイムアウトに達した場合にスレッドを閉じる方法はありますか?これに関する詳細情報はどこにありますか?

編集:ソケットのクローズを検出しないコード例

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 
4

3 に答える 3

1

ハートビートメカニズムが必要だと思います。

于 2012-04-06T05:12:10.903 に答える
0

標準の API タイムアウトを確認するだけです。

require 'timeout'
status = Timeout::timeout(3){sleep(1)}
puts status.inspect
status = Timeout::timeout(1){sleep(2)}
于 2015-03-23T15:20:11.840 に答える