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
  • 相关阅读:
    WebContent的子目录里面的jsp文件无法将数据传递给Servlet
    MVC 与 三层架构
    使用命令行操作MySQL 及 语法
    JDBC
    字符典
    servlet 生命周期
    6 shell内置命令
    5shell中的数组
    4shell中的特殊变量
    3shell命令替换
  • 原文地址:https://www.cnblogs.com/emyueguang/p/3853748.html
Copyright © 2011-2022 走看看