/ / Ruby - Lesen von mehreren Sockets (IRC-Bot) - Ruby, Multithreading, Sockets, IRC, Verbindungen

Ruby - Lesen von mehreren Sockets (IRC Bot) - Ruby, Multithreading, Sockets, IRC, Verbindungen

Ich versuche, einen IRC-Bot zu erstellen, der eine Verbindung zu mehreren Servern herstellt, und ich habe Probleme, von allen Sockets gleichzeitig zu lesen.

Mein aktueller Code:


#! / usr / bin / ruby benötigen "Socket"  servers = ["irc.chat4all.org "]  def connect (Server, Port, Anzahl) Setzt "Verbindung zu # {Server} ..." @socket [count] = TCPSocket.open (Server, Port) say ("NICK link_hub", count) say ("USER link_hub 0 * link_hub", count) read_data (count) Ende  def say (msg, count) @socket [count.to_i] .puts msg.to_s Ende  def say_channel (msg, count) @socket [count.to_i] .puts ("PRIVMSG #test:" + msg.to_s) Ende   def read_data (count) bis @socket [count] .eof? machen msg = @socket [count] .gets setzt msg if msg.match (/ ^ PING: (. *) $ /) say ("PONG # {$ ~ [1]}", count) say ("JOIN #test", count) Nächster Ende if msg.match (/ `test /) say_channel ("Verbindung zu efnet wird hergestellt ...", count) Thread.new { connect ("irc.efnet.nl", 6667, count) } Ende Ende Ende  conn = [] count = 0 @socket = [] servers.each do | server | Verbindung herstellen (Server, 6667, Anzahl) count + = 1 Ende

Das Problem ist, wenn ich den Befehl sende"` test ", es verbindet sich mit efnet, aber es liest den anderen Socket nicht mehr, obwohl ich die neue Verbindung in einem Thread starte. Ich möchte nur von beiden Buchsen gleichzeitig lesen. (die Variable "count" ist die Socket-Nummer)

Kann mir jemand weiterhelfen? Sehr geschätzt!

Antworten:

0 für die Antwort № 1

Dafür brauchen Sie Parallelität.

pids = []
servers.each do |server|
pids << fork do
connect(server, 6667, count)
count += 1
end
end
pids.each{|pid| Process.wait pid}

Möglicherweise möchten Sie Informationen zu Prozessen, Threads und anderen Themen des Betriebssystems lesen.