如何实时接收来自服务器的消息

时间:2014-09-09 16:09:05

标签: sockets lua corona

首先,请查看下面的代码。

local function receiveData( )
    l = client:receive()
    print(l)
    return l
end

local refNum = receiveData()

local function endTurn( )
    waitText = display.newText("Opponent Turn",centerX,allY*.1,native.systemFont,30)
    local passer = receiveData()
    if passer ~= nil then
        takeTurn()
    end
end

我想要做的是在屏幕上显示waitText,但是我遇到了障碍,因为在passer首先收到数据之前,waitText不会出现。所以,我想知道如何在等待接收数据的同时显示waitText。

我将不胜感激任何建议,谢谢。

2 个答案:

答案 0 :(得分:1)

你必须做两件事:

  1. 通过套接字对象上的settimeout(seconds)函数在套接字上设置超时。记录在案here。请注意,在使用receive时,您必须检查错误代码,因为它可能是timeout,表示在给定时间内没有任何内容可供读取。
  2. 设置定时器功能以定期继续读取套接字,直到数据到达
  3. 类似的东西:

    client:settimeout(0.01) -- 10 ms
    
    local function receiveData( )
        l,e = client:receive()
        print(l)
        return l,e
    end
    
    function checkReceive()
        local passer, err = receiveData()
        if passer ~= nil then
            takeTurn()
        else
            timer.performWithDelay(100, checkReceive) -- repeat the check in 100 ms
        end
    end
    
    local function endTurn( )
        waitText = display.newText("Opponent Turn",centerX,allY*.1,native.systemFont,30)
        checkReceive() -- returns in 10ms if nothing available, and will be called 
                       -- automatically every 100ms until something arrives
    end
    

    seconds可以具有毫秒级的精度,但可以遵循的实际精度因系统而异。

答案 1 :(得分:0)

可能是在其他对象下?尝试waitText:toFront()