- threadで複数のクライアントからのメッセージを並列化
- rclient側もthreadを使い、ソケットに対する出力と入力を分離
- クライアントを管理するSocksクラスを用意し、クライアントからのmsgをブロードキャストする
- serv.acceptでクライアントからの入力を待ち受け、入力があったときはブロック引数にそのソケットを渡す
1 require "socket"
2 class Socks
3 Socks = []
4 def self.<<(arg)
5 Socks << arg
6 end
7
8 def self.puts(msg)
9 Socks.each { |sock| sock.puts msg }
10 end
11 def self.list
12 Socks.each { |sock| puts sock }
13 end
14 end
15
16 TCPServer.open('localhost', 10001) do |serv|
17 print "waiting clients...\n"
18 loop do
19 Thread.start(serv.accept) do |sock|
20 Socks << sock
21 puts "#{sock} connected!"
22 sock.puts "Welcome to RServer!"
23 while msg = sock.gets
24 Socks.puts "#{sock} > #{msg}"
25 puts "#{msg.chomp}:#{sock}"
26 end
27 end
28 end
29 end
1 require "socket"
2 TCPSocket.open('localhost', 10001) do |sock|
3 Thread.start do
4 loop do
5 if sock.eof?
6 print "server down!"
7 sock.close
8 exit
9 else
10 print sock.gets
11 end
12 end
13 end
14 while msg = gets
15 sock.print msg
16 end
17 end
No comments:
Post a Comment