簡單io多路復用示例

require 'socket'

# 創建一個服務器套接字并將其綁定到端口 8080
server1 = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, Socket::IPPROTO_TCP)
server1.bind(Socket.sockaddr_in(8081, '0.0.0.0'))
server1.listen(10)


server2 = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, Socket::IPPROTO_TCP)
server2.bind(Socket.sockaddr_in(8082, '0.0.0.0'))
server2.listen(10)
puts 'server1,server2 start!'
servers = [server1, server2]

puts "master pid: #{Process.pid}"

def start_worker(servers)
  fork do
    pid = Process.pid
    loop do
      ios = IO.select servers, nil, nil, 0
    
      next unless ios
    
      ios.first.each do |rfd|
        new_socket, client_addr = rfd.accept
        puts "New connection from #{client_addr.inspect}"
        
        str = "hello, from: #{pid}"

        response = "HTTP/1.1 200 OK\r\n" +
             "Content-Type: text/plain\r\n" +
             "Content-Length: #{str.length}\r\n" +
             "Connection: close\r\n" +
             "\r\n" + str
        new_socket.write(response)
        new_socket.close
      end
    
    end
  end
end
start_worker(servers)
start_worker(servers)
loop do
  sleep(2)
end
  

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容