在游戏客户端使用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 =