我的问题是关于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
现在当它运行时它只接收来自第一个房间的数据而我不知道如何修复
答案 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]
(这没有意义,因为连接是一个数组,而不是一个映射)。