media-scientific - IT Blog

the backend developers blog

Chat mit Ruby… eine Client-Server Appliaktion

Vorlesen mit webReader

Nachfolgend ein kleines Beispiel, wie mit Ruby ein Chat geschreiben werden kann. Dieser besteht aus einer Client-Komponente und einer Server-Komponente. Das ganze funktioniert über die Konsole:

Der Server sieht folgendermaßen aus:

#!/usr/bin/ruby
require 'thread'
require 'socket'
host, port = ARGV[0], ARGV[1]
sr = Mutex.new
server = TCPServer.new(host, port)
clients = Array.new
while (socket = server.accept)
  sr.synchronize do clients << socket end
  swt = Thread.new(socket) do | the_socket |
    while line = the_socket.gets
      break if /'QUIT/ =~ line
      sr.synchronize do
        clients.each do | client |
          client.puts line if client != the_socket
        end
      end
    end
    sr.synchronize do clients.delete(socket) end
    socket.close
  end
end

Und der Client:

#!/usr/bin/ruby
require 'socket'
require 'thread'
host = ARGV[0] || ‘localhost’
port = ARGV[1] || 1111
socket = TCPSocket.new(host, port)
benutzer = (`users`).split(" ").uniq.to_s
t = Thread.new do
  while line = socket.gets
    puts "Received: #{line}"
  end
  socket.close
end
while line = "#{benutzer}: "+ $stdin.gets #Read input
  break if /^exit/ =~ line
  socket.puts line
end
socket.puts 'QUIT'
t.join

Leider weiß ich nicht mehr, wo ich die Vorlage zu diesem Chat her habe… Er zeigt jedoch sehr gut, wie man mit Ruby Sockets arbeiten kann.

Leave a Reply

You must be logged in to post a comment.