有兩個(gè)連接分別處理不同業(yè)務(wù)
連接A WebSocket協(xié)議連接,屬于內(nèi)網(wǎng)連接(處理主要業(yè)務(wù))
連接B Mqtt協(xié)議連接,屬于外網(wǎng)連接(協(xié)助處理云端業(yè)務(wù),兩者是在同一個(gè)進(jìn)程內(nèi)工作)
這時(shí)候外網(wǎng)中斷,連接B斷開連接,執(zhí)行重連機(jī)制,重連失敗報(bào)錯(cuò)而導(dǎo)致進(jìn)程重啟(影響連接A的業(yè)務(wù)),如何保證連接B重連不影響進(jìn)程中連接A運(yùn)行
目前使用
try{
} catch (\Throwable $e) {
}
捕獲異常是無效的,依然會(huì)導(dǎo)致重啟
有什么好的方案可以解決此類問題呢?
目前用版本
"php": "7.3.3",
"workerman/workerman": "4.1.15",
"workerman/mqtt": "1.6",
應(yīng)該是你try catch放錯(cuò)位置了,發(fā)下具體報(bào)錯(cuò)包括調(diào)用棧,還有重現(xiàn)問題的代碼
代碼片段
$mqtt->onClose = function (Client $mqtt) {
try {
$mqtt->reConnect();
} catch (\Throwable $e) {
}
}
try {
$mqtt->connect()
} catch (\Throwable $e) {
}
錯(cuò)誤
pid:26848 think\exception\ErrorException: stream_socket_client(): php_network_getaddresses: getaddrinfo failed: Name or service not known
2024-11-22 11:21:42 pid:26845 Workerman[think] start in DAEMON mode
2024-11-22 11:23:43 pid:26848 think\exception\ErrorException: stream_socket_client(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/php_server/gate_control_v3/vendor/workerman/workerman/Connection/AsyncTcpConnection.php:197
Stack trace:
2024-11-22 11:23:43 pid:26849 think\exception\ErrorException: stream_socket_client(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/php_server/gate_control_v3/vendor/workerman/workerman/Connection/AsyncTcpConnection.php:197
Stack trace:
2024-11-22 11:23:43 pid:26847 worker[GcServer-2070-201:26849] exit with status 64000
2024-11-22 11:23:43 pid:26847 worker[GcServer-2070-202:26848] exit with status 64000
https://github.com/walkor/workerman/blob/4.2/Connection/AsyncTcpConnection.php
復(fù)制這個(gè)文件覆蓋你本地的,然后重啟試下