zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    c#中跨线程调用windows窗体控件
    像职业选手样编码:地道Python
    数据挖掘笔记 第一章:引言
    SVN使用教程(基于SAE)
    常用的js函数
    linux服务之tuned
    PHP 开启短标签
    如叶梦想!
    分布式控制系统Git学习
    LabVIEW(十六):多列列表框控件
  • 原文地址:https://www.cnblogs.com/emyueguang/p/3853748.html
Copyright © 2011-2022 走看看