简单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
  

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容