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
posted @ 2014-07-18 16:09  莫压枯枯地  阅读(15873)  评论(5编辑  收藏  举报