Serwer na Ruby - wysyłanie do wszystkich klientów

0

Witam forumowiczów.
Dawno mnie tu nie było ;)
Ostatnio powróciłem do programowania i pomyślałem sobie o aplikacji serwer-klient(-ów kilku).
Chcę kilkoma programami klientowymi podpiąć się do serwera.
Ten ostatni napisałem póki co dość prosto w Ruby. Generalnie wysyłanie i komunikatów idzie dobrze, do pojedynczego klienta, jednak mam problem, bo nie wiem jak przerobić skrypt Ruby, by wysyłał komunikat od klienta nie tylko do niego samego jako echo, ale do wszystkich podłączonych.

require 'socket'
portnumber = 2000
sock = TCPServer.open(portnumber)

while true
  Thread.new(sock.accept) do |connection|
    puts "Accepting connection from: #{connection.peeraddr[2]}"

    begin
      while connection
        incomingData = connection.gets("\0")
        if incomingData != nil
          incomingData = incomingData.chomp
        end

        puts "Incoming: #{incomingData}"

        if incomingData == "DISCONNECT\0"
          puts "Received: DISCONNECT, closed connection"
          connection.close
          break
        else
          connection.puts "#{incomingData}"
          connection.flush
        end
      end
    rescue Exception => e
      # Displays Error Message
      puts "#{ e } (#{ e.class })"
    ensure
      connection.close
      puts "ensure: Closing"
    end
  end
end

Próbuje podmieniać:

connection.puts "#{incomingData}"
connection.flush

Na coś takiego:

Thread.list.each { |aThread|
if aThread != Thread.current
aThread.puts "#{msg}\0"
end 
}

Bez skutku. Dostaję error w ruby, że nie ma takiej funkcji jak "puts".

Z Ruby zaczynam, więc jeszcze w pełni nie ogarniam, dlatego będę wdzięczny za jakieś wskazówki.

Pozdrawiam
AW

1

Po pierwsze używaj EventMachine jak chcesz robić takie serwery. Potem masz tutaj przykład takiego serwera https://gist.github.com/2284810

1 użytkowników online, w tym zalogowanych: 0, gości: 1