クライアントがソケットに接続されている限り実行されるwhileループを実装したいと思います。スレッドベースになるので、クライアントが切断されるとスレッドが閉じられることを確認したいと思います。
質問:クライアントがまだソケットに接続されているかどうかを確認するにはどうすればよいですか?
質問:次のように起動すると、接続が閉じたときにスレッドはすでに閉じられていますか?Thread.start(socket.accept)do | client | ..。
クライアントがソケットに接続されている限り実行されるwhileループを実装したいと思います。スレッドベースになるので、クライアントが切断されるとスレッドが閉じられることを確認したいと思います。
質問:クライアントがまだソケットに接続されているかどうかを確認するにはどうすればよいですか?
質問:次のように起動すると、接続が閉じたときにスレッドはすでに閉じられていますか?Thread.start(socket.accept)do | client | ..。
これをチェックしてください、
require 'socket'
th=[]
server = TCPServer.open(2000)
loop do
Thread.start(server.accept) do |client|
client.puts "server started.."
# Something
th = Thread.list
th.each do |t|
if t.status == "sleep" # checks all client status
f = t.kill # kills thread if client is disconnected
end
end
end
end
スレッドを強制終了するか、そのスレッドを使用してクライアントのIPアドレスを配列に格納し、正確なクライアントのIPアドレスと比較することができます(t.addrなど)。
私はルビーのプログラミングの経験がありません。.Netの場合、なんらかのキープアライブプロトコルがないとふりをすることはできません。サーバーがx秒後にクライアントからデータを取得しない場合、サーバーはクライアントが切断されていると見なします。クライアントは、通信していないときにサーバーに何かを送信するためのタイマーを持っている必要があります。
server = TCPServer.open 12345
loop {
Thread.start(server.accept) do |client|
...
puts "client is offline!" if client.closed?
...
client.close
end
}
「閉店」にチェックを入れてもいいですか?「クライアント」で。