有兩個連接分別處理不同業(yè)務
連接A WebSocket協(xié)議連接,屬于內網連接(處理主要業(yè)務)
連接B Mqtt協(xié)議連接,屬于外網連接(協(xié)助處理云端業(yè)務,兩者是在同一個進程內工作)
這時候外網中斷,連接B斷開連接,執(zhí)行重連機制,重連失敗報錯而導致進程重啟(影響連接A的業(yè)務),如何保證連接B重連不影響進程中連接A運行
目前使用
try{
} catch (\Throwable $e) {
}
捕獲異常是無效的,依然會導致重啟
有什么好的方案可以解決此類問題呢?
目前用版本
"php": "7.3.3",
"workerman/workerman": "4.1.15",
"workerman/mqtt": "1.6",
應該是你try catch放錯位置了,發(fā)下具體報錯包括調用棧,還有重現(xiàn)問題的代碼
代碼片段
$mqtt->onClose = function (Client $mqtt) {
try {
$mqtt->reConnect();
} catch (\Throwable $e) {
}
}
try {
$mqtt->connect()
} catch (\Throwable $e) {
}
錯誤
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
復制這個文件覆蓋你本地的,然后重啟試下