使用Lua的Multiclient Copas服务器

时间:2015-12-29 14:13:19

标签: mysql lua server copas

好的,最后我需要一些帮助...... 我试图建立一个同时收听几个客户端的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")

1 个答案:

答案 0 :(得分:0)

您的脚本会在4.2步骤中阻止,因为您以不正确的方式使用selectselect需要查看它检查的套接字表,因此您需要使用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 distributionmy answer to a similar question