MST

星途 面试题库

面试题:Ruby Socket编程之多客户端并发处理

使用Ruby的Socket实现一个能够处理多个客户端并发连接的服务器。要求服务器可以接收每个客户端发送的消息,并将消息广播给所有已连接的客户端。同时要处理好客户端断开连接等异常情况。
16.9万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
require 'socket'

server = TCPServer.new('localhost', 3000)
clients = []

trap('INT') {
  server.close
  clients.each(&:close)
  exit
}

loop do
  client = server.accept
  clients << client
  Thread.start(client) do |current_client|
    begin
      while message = current_client.gets
        clients.each do |c|
          c.puts(message) unless c == current_client
        end
      end
    rescue EOFError, Errno::ECONNRESET
      clients.delete(current_client)
      current_client.close
    end
  end
end