sock.tcp()
sock.udp()
创建sock client对象,注意这里创建的是一个userdata对象,不是table,不可以对他二次赋值,如
local sc = sock.tcp()
sc.flag = true -- 不能这样用
返回 | 说明 |
---|---|
obj | 对象, 创建的mqtt实例对象,但是不是一般的table,不能二次赋值 |
local so = sock.tcp()
-- 服务器地址
so:host(host)
so:port(port)
so:recon(2000, 10) -- 重连间隔时间单位ms, 重启之前的重连次数
so:keepAlive(60 * 1000) -- 应用层心跳时间ms。发数据在回调里面操作
local connectHandle = function()
log.info("sock connet success", so:id())
-- led指示
linkled(1)
-- 连接上发注册包
so:send("CMD,GROUP,AXCV")
end
local recvHandle = function(sid, data)
log.info("netc recv", sid, data)
end
local myBeatPre = "testBBBB"
-- 演示,闭包,函数,生成心跳包
local genBeat = function() return myBeatPre .. os.time() end
local keepAliveHandle = function()
-- 发心跳
so:send(genBeat())
log.error("keepAliveHandle", so:id())
end
local offlineHandle = function()
-- led指示
linkled(0)
log.error("sock is disconnect", id) -- auto reconnect
end
local errorHandle = function()
log.error("sock is broken, id=", so:id())
-- sys.restart("sock is broken") -- 当连续重连达到重连次数后,进入error状态
end
-- 注册回调函数
so:on("connect", connectHandle)
so:on("recv", recvHandle)
so:on("keepAlive", keepAliveHandle)
so:on("error", errorHandle) -- 重连次数达到设定报错
so:on("close", offlineHandle)
if so:connect() then
log.info("sock status ", so:status())
-- 测试消息发送
local function mesgTest()
log.info("mesgTest", so:status())
if so:status() then
so:send("msg ts:" .. os.time())
end
end
-- sys.timerLoopStart(mesgTest, 5000) --定时发消息测试
else
log.error("sock connect error", so:status())
end
-- so:close() -- 主动关闭
返回 | 说明 |
---|---|
id | int, 创建的socker id |
设置连接host,可以是url或者ip
设置连接端口,类型int
设置心跳时间
设置重连时间
连接服务器,这里可以不传参数,提前单独设置也可以
关闭连接
获取连接状态
返回 | 说明 |
---|---|
stat | bool, 此sock的连接状态 |
发送数据
入参 | 说明 |
---|---|
data | string, 数据 |
主动读取缓存区读取数据,一般不用这个,采用异步接口
返回 | 说明 |
---|---|
data | string, 数据 |
连接事件订阅
入参 | 说明 |
---|---|
msg | string, 事件, recv ,close , connect , keepAlive ,error |
fun | function, 回调函数 |