美文网首页
简单io多路复用示例

简单io多路复用示例

作者: SecondRocker | 来源:发表于2024-05-18 22:43 被阅读0次
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
  

相关文章

网友评论

      本文标题:简单io多路复用示例

      本文链接:https://www.haomeiwen.com/subject/gcjgfjtx.html