lua socket处理多个连接

时间:2014-03-24 20:05:39

标签: lua luasocket

我的问题是关于lua套接字,说我有聊天,我想为聊天做一个机器人。但聊天有多个房间都在不同的服务器上,由一个名为getServer的函数计算 connect函数看起来像这样

function connect(room)
   con = socket.tcp()
   con:connect(getServer(room), port)
   con:settimeout(0)
   con:setoption('keepalive', true)
   con:send('auth' .. room)

和循环它的函数将是

function main()
   while true do
     rect, r, st = socket.select({con}, nil, 0.2)
     if (rect[con] ~= nil) then
        resp, err, part = con:receive("*l")
        if not( resp == nil) then
            self.events(resp)
 end
    end
       end
          end

现在当它运行时它只接收来自第一个房间的数据而我不知道如何修复

1 个答案:

答案 0 :(得分:1)

尝试创建连接数组。连接房间的地图也许有用。示例:

local connections = {}
local roomConnMap = {}

function connect(room)
   local con = socket.tcp()
   con:connect(getServer(room), port)
   con:settimeout(0)
   con:setoption('keepalive', true)
   con:send('auth' .. room)

   table.insert(connections, con)
   roomConnMap[room] = con
end

function main()
   while true do
     local rect, r, st = socket.select(connections, nil, 0.2)
     for i, con in ipairs(rect) do 
        resp, err, part = con:receive("*l")
        if resp ~= nil then
            self.events(resp)
        end
     end
   end
end

请注意,rect是找到要读取数据的连接项的数组。所以在for i,con循环中,con是连接对象,不要使用connections[con](这没有意义,因为连接是一个数组,而不是一个映射)。