检查socket-client是否仍然连接

时间:2012-04-12 10:05:16

标签: ruby sockets networking

我想实现一个while循环,只要客户端连接到我的套接字就会运行。 这将是基于线程的,所以我想让一旦客户端断开连接线程关闭。

  1. 问题:如何检查客户端是否仍然连接到我的套接字?

  2. 问题:当连接关闭时,线程是否已经关闭,如果我像这样启动它:Thread.start(socket.accept)do | client | ...

3 个答案:

答案 0 :(得分:2)

检查一下,

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地址,并与精确客户端进行比较。(比如,t.addr)

答案 1 :(得分:0)

我没有编程ruby的经验。如果它是.Net,没有某种保持活动协议,你假装的东西是不可能的。如果服务器在x秒后没有从客户端获取数据,则假定客户端已断开连接。客户端必须有一个计时器,以便在不通信时向服务器发送内容。

答案 2 :(得分:0)

server = TCPServer.open 12345

loop {
  Thread.start(server.accept) do |client|
    ...
    puts "client is offline!" if client.closed?
    ...
    client.close
  end
}

你可以查看“关闭?”在“客户”中。