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して、接続待ちと書き出しを別々のプロセスでやっているという 意味のないプログラムです。