Comparativa I: Cliente en Ruby

Pasamos de Java a Ruby, un lenguaje que a pesar de ser aproximadamente tan viejo como el primero, aún sigue siendo desconocido por algunos europeos. Hace poco ha tenido un auge en el viejo continente gracias, en gran medida, a RubyOnRails.

Puesto que vamos a necesitar realizar conexiones, lo primero es:

require 'socket'

Acto seguido, se define el método mensaje_aleatorio:

def mensaje_aleatorio
msg = ["Hola, Mundo","Melón.","Larga y próspera vida.","La Quinta Raza.","So long, and thanks for all the fish.","Spain is different.", "Com va això?","Bona tarda."]
msg[rand(msg.length)]
end

Y ahora llega la magia Ruby. Para crear diez hilos diferentes simplemente se utiliza el método times y la clase Thread:

num_hilos = 10
num_hilos.times do |i|
Thread.start do

En él, se crea un bucle infinito en el que se conecta al servidor (simplemente con TCPSocket.new(servidor,puerto) ), envía el mensaje y espera la respuesta, comprobando que es el texto enviado.

while(true)
puts "Abriendo socket #{j}"
begin
socket = TCPSocket.new("localhost",7777)
puts "Abierto socket #{j}"
s = mensaje_aleatorio
socket.puts s
puts "Enviado \"#{s}\" en #{j}"
puts (s == (s1=socket.gets().strip())) ? "Correcto" : "Falló\nEsperado: #{s}\nDevuelto: #{s1}"
rescue Exception => bang
puts bang.to_s
ensure
socket.close unless socket.nil?
end
end

Ya, por último y fuera del método times, se crea un bucle infinito para evitar que termine el script sin hacer lo que se le pide.

Aquí el código completo.

Author: Serabe

Mathematician, and Ruby and JavaScript programmer. Sometimes I speak at conferences and local meetups.

Leave a Reply

Your email address will not be published. Required fields are marked *