好的,最后我需要一些帮助...... 我试图建立一个同时收听几个客户端的lua服务器。
我们正在使用lua编写Android游戏,这个游戏必须与我的服务器通信。我需要从播放器发送和接收数据并将其存储在MySQL数据库中。 但我最大的问题是,luasocket本身无法处理多个客户端,因此我尝试使用 Copas 。
我正在使用本教程/手册测试Copas:Copas Manual 但是我的代码甚至不会监听连接...所以我已经插入了一些打印命令来查看我的代码挂起的位置。 有人能帮助我吗?
local socket = require("socket")
local copas = require("copas")
local server1 = assert(socket.bind("*", 2906))
local server2 = assert(socket.bind("*", 2907))
local server3 = assert(socket.bind("*", 2908))
--Register servers
copas.addserver(server1, echo1)
copas.addserver(server2, echo2)
copas.addserver(server3, echo3)
--Simple echo handler
function echo1(skt)
print("1")
reqdata = copas.receive(skt, pattern)
copas.send(skt, respdata)
end
function echo2(skt)
print("2")
reqdata = copas.receive(skt, pattern)
copas.send(skt, respdata)
end
function echo3(skt)
print("3")
reqdata = copas.receive(skt, pattern)
copas.send(skt, respdata)
end
print("4")
reading = {server}
print("4.1")
while true do
print("4.2")
input = socket.select(reading)
print("4.3")
skt = input:accept()
print("4.4")
newthread(echo1(skt))
print("4.5")
end
print("5")
copas.loop()
print("6")
答案 0 :(得分:0)
您的脚本会在4.2
步骤中阻止,因为您以不正确的方式使用select
。 select
需要查看它检查的套接字表,因此您需要使用servers = {server1, server2, server3}
并将此表格传递给select
。
select
然后返回一个包含"可读"中的套接字列表的表。和#34;可写"陈述你可以迭代。这些方面的东西:
local servers = {server1, server2, server3}
local canread, canwrite, error = socket.select(servers, nil, 1)
for _, input in ipairs(canread) do
local client = input:accept()
...
end
有关详细信息,请参阅the example from luasocket distribution和my answer to a similar question。