选择websocket客户端
懒人自带的有一个简单的websocket客户端。
由于没有提供认证参数接口,无法连接EMQX。
我们需要借助golang的三方类库,来实现功能更强大的websocket客户端。
EMQX官方推荐和维护的类库是“paho.mqtt.golang 客户端库”
参考资料:如何在 Golang 中使用 MQTT
安装EMQX
在懒人精灵golang混合项目的“libgo”目录下,安装MQTT 客户端库。
安装命令会自动更新“go.mod”配置文件。
go get github.com/eclipse/paho.mqtt.golang
实现websocket客户端
新建一个go文件“\libgo\web\emqx.go”,该文件提供以下方法:
1、初始化MQTT(websocket)客户端
2、发布消息
3、订阅主题
4、取消订阅
5、断开连接
6、注册MQTT相关函数到bridge
在main.go中初始化注册
// \libgo\main.go
// 使用sync.Once确保注册过程只执行一次(确保线程安全,避免重复注册)
var registerOnce sync.Once
// 初始化时调用这些分类的注册函数
func init() {
registerOnce.Do(func() {
web.RegisterMQTTFunctions()
})
}
// main函数为空,说明这个包可能被其他程序导入使用,而不是直接运行
func main() {
bridge.PrintLog("程序启动,等待HTTP请求...")
// 为了保持程序运行,我们需要阻塞主线程
select {}
}
在懒人精灵中调用golang函数
-- 注册MQTT消息处理函数
gobridge.register("onMQTTMessage", function(jsonData)
local data = jsonLib.decode(jsonData)
print("收到MQTT消息,主题:", data.topic, "内容:", data.payload)
end)
-- MQTT配置
local mqttConfig = {
protocol = "ws://", -- 协议头,可以是 "tcp://" 或 "ws://"
broker = "服务器ip地址",
port = 8083,
clientID = "go_mqtt_client", -- 客户端ID
username = "账号",
password = "密码",
wsPath = "/mqtt" -- WebSocket路径,仅在使用ws协议时需要
}
-- 将配置转换为JSON字符串
local configJSON = jsonLib.encode(mqttConfig)
-- 初始化MQTT客户端
gobridge.call("libgo.so", "InitMQTTClient", configJSON)
-- 发布消息
gobridge.call("libgo.so", "PublishMQTTMessage", "test/topic", 0, false, "Hello from Lua")
-- 订阅主题
gobridge.call("libgo.so", "SubscribeMQTTTopic", "test/topic", 0)
-- 断线重连处理
local mqttConnected = true
local reconnectAttempts = 0
local maxReconnectAttempts = 5
local reconnectInterval = 5000 -- 5秒
-- 检查MQTT连接状态并尝试重连
function checkMQTTConnection()
-- 略
end
-- 定时检查MQTT连接状态
setTimer(function()
checkMQTTConnection()
end, reconnectInterval)
-- 模拟MQTT连接断开(仅用于测试)
-- 在实际使用中,这个函数应该由MQTT库的断开事件触发
function simulateMQTTDisconnect()
mqttConnected = false
print("MQTT连接已断开")
end
-- 等待一段时间
sleep(3000)
-- 取消订阅
gobridge.call("libgo.so", "UnsubscribeMQTTTopic", "test/topic")
-- 断开连接
gobridge.call("libgo.so", "DisconnectMQTTClient", 250)
附件
文章的附件,提供了核心的“\libgo\web\emqx.go”文件,和lua文件。
总结
这个懒人精灵项目中的websocket客户端采用了Go+Lua的混合编程架构,通过Bridge桥接机制实现两种语言之间的通信。
技术上采用了MQTT协议进行消息传输,支持TCP和WebSocket两种连接方式,并实现了完善的断线重连机制。
整体设计注重稳定性、可扩展性和易用性,通过合理的错误处理、日志记录和并发控制,确保了系统的可靠运行。
1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 【懒人精灵】使用golang实现websocket和mqtt连接(3)
飞云脚本圈: 586333520

Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 【懒人精灵】使用golang实现websocket和mqtt连接(3)