socket ====== .. _socket-1: socket ------ 模块功能:数据链路激活、SOCKET管理(创建、连接、数据收发、状态维护) socket.isReady() ~~~~~~~~~~~~~~~~ SOCKET 是否有可用 - 参数 无 - 返回值 可用true,不可用false - 例子 无 -------------- socket.tcp(ssl, cert) ~~~~~~~~~~~~~~~~~~~~~ 创建基于TCP的socket对象 - 参数 +-----------------------------------+-----------------------------------+ | 传入值类型 | 释义 | +===================================+===================================+ | bool | **可选参数 | | | ,默认为\ ``nil``**\ ,ssl,是否 | | | 为ssl连接,true表示是,其余表示否 | +-----------------------------------+-----------------------------------+ | table | **可选参数,默认为\ ` | | | `nil``**\ ,cert,ssl连接需要的证 | | | 书配置,只有ssl参数为true时,才参 | | | 数才有意义,cert格式如下:{caCert | | | = “ca.crt”, | | | –CA证书文件(Base64编码 | | | X.509格式),如果存在此参数 | | | ,则表示客户端会对服务器的证书进 | | | 行校验;不存在则不校验clientCert | | | = “client.crt”, | | | –客户端证书文件(Base64编码 | | | X.509格式),服务器对客户端的证 | | | 书进行校验时会用到此参数clientKey | | | = “client.key”, | | | –客户端私钥文件(Base64编码 | | | X.509格式)clientPassword = | | | “123456”, | | | –客户端证书文件密码[可选]} | +-----------------------------------+-----------------------------------+ - 返回值 client,创建成功返回socket客户端对象;创建失败返回nil - 例子 .. code:: lua c = socket.tcp() c = socket.tcp(true) c = socket.tcp(true, {caCert="ca.crt"}) c = socket.tcp(true, {caCert="ca.crt", clientCert="client.crt", clientKey="client.key"}) c = socket.tcp(true, {caCert="ca.crt", clientCert="client.crt", clientKey="client.key", clientPassword="123456"}) -------------- socket.udp() ~~~~~~~~~~~~ 创建基于UDP的socket对象 - 参数 无 - 返回值 client,创建成功返回socket客户端对象;创建失败返回nil - 例子 .. code:: lua c = socket.udp() -------------- mt:connect(address, port, timeout) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 连接服务器 - 参数 +------------+--------------------------------------------------------+ | 传入值类型 | 释义 | +============+========================================================+ | string | address 服务器地址,支持ip和域名 | +------------+--------------------------------------------------------+ | param | port string或者number类型,服务器端口 | +------------+--------------------------------------------------------+ | number | **可选参数,默认为\ ``120``**\ ,timeout | | | 可选参数,连接超时时间,单位秒 | +------------+--------------------------------------------------------+ - 返回值 bool result true - 成功,false - 失败 string ,id ‘0’ – ‘8’ ,返回通道ID编号 - 例子 .. code:: lua c = socket.tcp(); c:connect(); -------------- mt:asyncSelect(keepAlive, pingreq) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 异步收发选择器 - 参数 +------------+--------------------------------------------------------+ | 传入值类型 | 释义 | +============+========================================================+ | number | keepAlive,服 | | | 务器和客户端最大通信间隔时间,也叫心跳包最大时间,单位秒 | +------------+--------------------------------------------------------+ | string | pingreq,心跳包的字符串 | +------------+--------------------------------------------------------+ - 返回值 boole,false 失败,true 表示成功 - 例子 无 -------------- mt:asyncSend(data, timeout) ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 异步发送数据 - 参数 +------------+--------------------------------------------------------+ | 传入值类型 | 释义 | +============+========================================================+ | string | data 数据 | +------------+--------------------------------------------------------+ | number | **可选参数,默认为\ ``nil``**\ ,timeout | | | 可 | | | 选参数,发送超时时间,单位秒;为nil时表示不支持timeout | +------------+--------------------------------------------------------+ - 返回值 result true - 成功,false - 失败 - 例子 .. code:: lua c = socket.tcp(); c:connect(); c:asyncSend("12345678"); -------------- mt:asyncRecv() ~~~~~~~~~~~~~~ 异步接收数据 - 参数 无 - 返回值 nil, 表示没有收到数据 data 如果是UDP协议,返回新的数据包,如果是TCP,返回所有收到的数据,没有数据返回长度为0的空串 - 例子 .. code:: lua c = socket.tcp(); c:connect() data = c:asyncRecv() -------------- mt:send(data, timeout) ~~~~~~~~~~~~~~~~~~~~~~ 发送数据 - 参数 +-----------------------------------+-----------------------------------+ | 传入值类型 | 释义 | +===================================+===================================+ | string | data | | | 数据此处传入的数据长度和剩余可 | | | 用内存有关,只要内存够用,可以随 | | | 便传入数据虽然说此处的数据长度没 | | | 有特别限制,但是调用core中的sock | | | et发送接口时,每次最多发送11200字 | | | 节的数据例如此处传入的data长度是1 | | | 12000字节,则在这个send接口中,会 | | | 循环10次,每次发送11200字节的数据 | +-----------------------------------+-----------------------------------+ | number | **可选参 | | | 数,默认为\ ``120``**\ ,timeout | | | 可选参数,发送超时时间,单位秒 | +-----------------------------------+-----------------------------------+ - 返回值 result true - 成功,false - 失败 - 例子 .. code:: lua c = socket.tcp(); c:connect(); c:send("12345678"); -------------- mt:recv(timeout, msg, msgNoResume) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 接收数据 - 参数 +-----------------------------------+-----------------------------------+ | 传入值类型 | 释义 | +===================================+===================================+ | number | **可选 | | | 参数,默认为\ ``0``**\ ,timeout | | | 可选参数,接收超时时间,单位毫秒 | +-----------------------------------+-----------------------------------+ | string | **可 | | | 选参数,默认为\ ``nil``**\ ,msg | | | 可选参数,控制 | | | socket所在的线程退出recv阻塞状态 | +-----------------------------------+-----------------------------------+ | bool | **可选参数, | | | 默认为\ ``nil``**\ ,msgNoResume | | | 可选参数,控制socket所在的线程 | | | 退出recv阻塞状态,false或者nil表 | | | 示“在recv阻塞状态,收到msg消息, | | | 可以退出阻塞状态”,true表示不退出 | +-----------------------------------+-----------------------------------+ - 返回值 result 数据接收结果,true表示成功,false表示失败 data 如果成功的话,返回接收到的数据;超时时返回错误为“timeout”;msg控制退出时返回msg的字符串 param 如果是msg返回的false,则data的值是msg,param的值是msg的参数 - 例子 .. code:: lua c = socket.tcp(); c:connect() result, data = c:recv() false,msg,param = c:recv(60000,"publish_msg") -------------- mt:close() ~~~~~~~~~~ 销毁一个socket - 参数 无 - 返回值 nil - 例子 .. code:: lua c = socket.tcp(); c:connect(); c:send("123"); c:close() -------------- socket.setTcpResendPara(retryCnt, retryMaxTimeout) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 设置TCP层自动重传的参数 - 参数 +------------+--------------------------------------------------------+ | 传入值类型 | 释义 | +============+========================================================+ | number | **可选参数 | | | ,默认为\ ``4``**\ ,retryCnt,重传次数;取值范围0到12 | +------------+--------------------------------------------------------+ | number | **可选参数,默认为\ ``16``**\ ,retryMaxTimeout, | | | 限制每次重传允许的最大超时时间(单位秒),取值范围1到16 | +------------+--------------------------------------------------------+ - 返回值 nil - 例子 .. code:: lua setTcpResendPara(3,8) setTcpResendPara(4,16) -------------- socket.setDnsParsePara(retryCnt, retryTimeoutMulti) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 设置域名解析参数 注意:0027以及之后的core版本才支持此功能 - 参数 +-----------------------------------+-----------------------------------+ | 传入值类型 | 释义 | +===================================+===================================+ | number | **可选参数,默认为\ ``4``**\ , | | | retryCnt,重传次数;取值范围1到8 | +-----------------------------------+-----------------------------------+ | number | **可选参数,默 | | | 认为\ ``4``**\ ,retryTimeoutMult | | | i,重传超时时间倍数,取值范围1到5 | | | 第n次重传超时时间的计算方式为:第 | | | n次的重传超时基数\ *retryTimeoutM | | | ulti,单位为秒重传超时基数表为{1, | | | 1, 2, 4, 4, 4, 4, | | | 4}第1次重传 | | | 超时时间为:1*\ retryTimeoutMulti | | | 秒第2次重传 | | | 超时时间为:1\ *retryTimeoutMulti | | | 秒第3次重传 | | | 超时时间为:2*\ retryTimeoutMulti | | | 秒…………………………………….第8次重 | | | 传超时时间为:8*retryTimeoutMulti | | | 秒 | +-----------------------------------+-----------------------------------+ - 返回值 nil - 例子 .. code:: lua socket.setDnsParsePara(8,5) -------------- socket.printStatus() ~~~~~~~~~~~~~~~~~~~~ 打印所有socket的状态 - 参数 无 - 返回值 无 - 例子 .. code:: lua socket.printStatus() --------------