luasocket 接收數據


在游戲客戶端使用luasocket作為網絡通信的手段, 有一點很蛋疼, 就是它的receive是阻塞的,  那界面就卡死在那里了,  不過有一個函數:settimeout(), 傳入參數0, 表示如果沒有數據就立即返回.  所以就在可以在主循環里面不停的調用receive()這個函數.  不過I/O的開銷那不是一般的高, 非常高!

其實我想要的東西很簡單, 異步接收, 有數據到了, 調用指定的回調函數來處理.  另外一個就是, 跨平台, windows, linux, android, ios ......   其實可以使用libevent, 但是感覺在C端libevent太龐大了.  好了,  不扯了,  這種I/O開銷還在可以承受的范圍之內. 代碼如下:

package.path = "./frameworks/cocos2d-x/external/lua/luasocket/?.lua"

local socket = require ("socket")
local client = false;

if not socket then
    print("load socket module failed.")
else
    print("success load socket module.")
    local host = "127.0.0.1"
    local port = 34561
    client = socket.connect4(host, port)
    if not client then
        print("connect server failed.")
    else
        client:send("this is lua client!");        
        client:settimeout(0);
    end
end

function receive_message()
    if client then
        local recvstr, err = client:receive();
        print("recvstr, err:", recvstr, err);
    end
end


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM