Rubyでサーバを作ってクライアントにデータを配信 vol.5
vol.4のプログラムはclientsにひとつずつ配信しています。 一瞬で終わるならいいのですが、ネットワークなんて遅延しまくりなので、 あまりよろしくありません。一度に配信処理をしたいものです。 試しに2秒遅延を入れてみると、こうなります。
require "socket" port = if ARGV[0] then ARGV[0] else 'echo' end gate = TCPServer.open(port) sockets = [gate, STDIN] clients = [] loop do r_sockets = IO.select(sockets+clients)[0] r_sockets.each do |socket| case socket when STDIN str = socket.gets clients.each do |client| client.puts str.upcase sleep 2 end when TCPServer client = socket.accept clients << client p clients when TCPSocket unless socket.eof? str=socket.gets socket.puts str.upcase else socket.close clients.delete(socket) p clients end end end end gate.close
このくらいレスポンスが悪いと、ああ、なんとかしなきゃならないなと思いますね。