0

我正在尝试制作一个连接到多个服务器的 IRC 机器人,但我无法同时读取所有套接字。

我当前的代码:

    #!/usr/bin/ruby
    需要“插座”

    服务器 = [“irc.chat4all.org”]

    def 连接(服务器、端口、计数)
            提出“连接到#{server} ...”
                    @socket[count] = TCPSocket.open(服务器,端口)
                    说(“尼克链接集线器”,计数)
                    说(“用户链接集线器 0 * 链接集线器”,计数)
                    读取数据(计数)
    结尾

    def 说(味精,计数)
            @socket[count.to_i].puts msg.to_s
    结尾

    def say_channel(味精,计数)
            @socket[count.to_i].puts("PRIVMSG #test :"+msg.to_s)
    结尾


    def read_data(计数)
            直到@socket[count].eof? 做
                    msg = @socket[count].gets
                    放味精
                    如果 msg.match(/^PING :(.*)$/)
                            说(“乒乓球 #{$~[1]}”,计数)
                            说(“加入#test”,计数)
                            下一个
                    结尾
                    如果 msg.match(/`test/)
                            say_channel("正在连接 efnet...", count)
                            线程.new {
                            连接(“irc.efnet.nl”,6667,计数)
                            }
                    结尾
            结尾
    结尾

    连接 = []
    计数 = 0
    @socket = []
    servers.each 做 |server|
            连接(服务器,6667,计数)
            计数 += 1
    结尾
    

问题是当我发送命令'`test'时,它连接到efnet,但即使我在线程中运行新连接,它也不会再读取另一个套接字。我只想同时从两个套接字读取。(变量'count'是套接字号)

谁能帮我吗?非常感激!

4

1 回答 1

0

为此,您需要并行性。

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

您可能想阅读有关进程、线程和其他操作系统主题的信息。

于 2013-04-14T03:58:39.897 回答