Rubyでサーバを作ってクライアントにデータを配信 vol.3
forkはダメです。forkは別プロセスを立ち上げるので、メモリの共有ができません。 なので、同じデータの一斉配信には向いていません。プロセス間通信とか仕組みが面倒です。
ちゃんと動かないプログラムをとりあえず書いてみました。
require "socket" port = if ARGV[0] then ARGV[0] else 'echo' end gate = TCPServer.open(port) clients = [] pid=Process.pid fork if pid == Process.pid loop do clients << gate.accept p clients end else while msg = STDIN.gets p clients clients.each do |client| if client.closed? clients.delete client else begin client.puts msg.upcase rescue end end end end end gate.close
いきなりforkして、接続待ちと書き出しを別々のプロセスでやっているという 意味のないプログラムです。