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...