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多路复用示例
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 发现一个好文章,因为最近在弄一个taf的网络库,发现原来的网络库只支持linux的epoll IO复用,代码没有...
- 客户端参考:https://www.jianshu.com/p/027af54275f3
- 一、用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空...
- 同步与异步,阻塞与非阻塞,以及这四个名词之间的两两集合,是学习并发编程/网络编程时会遇到的几个重要概念 注:以下I...