国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

workerman重連捕獲異常是無效的,依然會(huì)導(dǎo)致進(jìn)程重啟

Jack997

有兩個(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",

497 1 1
1個(gè)回答

walkor 打賞

應(yīng)該是你try catch放錯(cuò)位置了,發(fā)下具體報(bào)錯(cuò)包括調(diào)用棧,還有重現(xiàn)問題的代碼

  • Jack997 2024-11-22

    代碼片段
    $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

  • walkor 2024-11-22

    調(diào)用棧沒貼

  • Jack997 2024-11-22

    connect 與 reConnect 我都有try catch 包起來,不知具體是要包在哪個(gè)位置呢?

  • walkor 2024-11-22

    你要貼下調(diào)用棧,好判斷異常從哪里出來的

  • Jack997 2024-11-22

    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:

    0 [internal function]: think\initializer\Error->appError(2, 'stream_socket_c...', '/home/php_serve...', 197, Array)

    1 /home/php_server/gate_control_v3/vendor/workerman/workerman/Connection/AsyncTcpConnection.php(197): stream_socket_client('tcp://mqtt.yimi...', 0, 'php_network_get...', 0, 2)

    2 /home/php_server/gate_control_v3/vendor/workerman/workerman/Events/Select.php(238): Workerman\Connection\AsyncTcpConnection->connect()

    3 /home/php_server/gate_control_v3/vendor/workerman/workerman/Events/Select.php(299): Workerman\Events\Select->tick()

    4 /home/php_server/gate_control_v3/vendor/workerman/workerman/Worker.php(1638): Workerman\Events\Select->loop()

    5 /home/php_server/gate_control_v3/vendor/workerman/workerman/Worker.php(1429): Workerman\Worker::forkOneWorkerForLinux(Object(Workerman\Worker))

    6 /home/php_server/gate_control_v3/vendor/workerman/workerman/Worker.php(1403): Workerman\Worker::forkWorkersForLinux()

    7 /home/php_server/gate_control_v3/vendor/workerman/workerman/Worker.php(560): Workerman\Worker::forkWorkers()

    8 /home/php_server/gate_control_v3/app/server/GcServerEvent.php(161): Workerman\Worker::runAll()

    9 /home/php_server/gate_control_v3/app/command/GcServer.php(153): app\server\GcServerEvent::run()

    10 /home/php_server/gate_control_v3/vendor/topthink/framework/src/think/console/Command.php(210): app\command\GcServer->execute(Object(think\console\Input), Object(think\console\Output))

    11 /home/php_server/gate_control_v3/vendor/topthink/framework/src/think/Console.php(654): think\console\Command->run(Object(think\console\Input), Object(think\console\Output))

    12 /home/php_server/gate_control_v3/vendor/topthink/framework/src/think/Console.php(313): think\Console->doRunCommand(Object(app\command\GcServer), Object(think\console\Input), Object(think\console\Output))

    13 /home/php_server/gate_control_v3/vendor/topthink/framework/src/think/Console.php(250): think\Console->doRun(Object(think\console\Input), Object(think\console\Output))

    14 /home/php_server/gate_control_v3/think(8): think\Console->run()

    15 {main}

    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:

    0 [internal function]: think\initializer\Error->appError(2, 'stream_socket_c...', '/home/php_serve...', 197, Array)

    1 /home/php_server/gate_control_v3/vendor/workerman/workerman/Connection/AsyncTcpConnection.php(197): stream_socket_client('tcp://mqtt.yimi...', 0, 'php_network_get...', 0, 2)

    2 /home/php_server/gate_control_v3/vendor/workerman/workerman/Events/Select.php(238): Workerman\Connection\AsyncTcpConnection->connect()

    3 /home/php_server/gate_control_v3/vendor/workerman/workerman/Events/Select.php(299): Workerman\Events\Select->tick()

    4 /home/php_server/gate_control_v3/vendor/workerman/workerman/Worker.php(1638): Workerman\Events\Select->loop()

    5 /home/php_server/gate_control_v3/vendor/workerman/workerman/Worker.php(1429): Workerman\Worker::forkOneWorkerForLinux(Object(Workerman\Worker))

    6 /home/php_server/gate_control_v3/vendor/workerman/workerman/Worker.php(1403): Workerman\Worker::forkWorkersForLinux()

    7 /home/php_server/gate_control_v3/vendor/workerman/workerman/Worker.php(560): Workerman\Worker::forkWorkers()

    8 /home/php_server/gate_control_v3/app/server/GcServerEvent.php(161): Workerman\Worker::runAll()

    9 /home/php_server/gate_control_v3/app/command/GcServer.php(153): app\server\GcServerEvent::run()

    10 /home/php_server/gate_control_v3/vendor/topthink/framework/src/think/console/Command.php(210): app\command\GcServer->execute(Object(think\console\Input), Object(think\console\Output))

    11 /home/php_server/gate_control_v3/vendor/topthink/framework/src/think/Console.php(654): think\console\Command->run(Object(think\console\Input), Object(think\console\Output))

    12 /home/php_server/gate_control_v3/vendor/topthink/framework/src/think/Console.php(313): think\Console->doRunCommand(Object(app\command\GcServer), Object(think\console\Input), Object(think\console\Output))

    13 /home/php_server/gate_control_v3/vendor/topthink/framework/src/think/Console.php(250): think\Console->doRun(Object(think\console\Input), Object(think\console\Output))

    14 /home/php_server/gate_control_v3/think(8): think\Console->run()

    15 {main}

    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

  • Jack997 2024-11-22

    我這里是基于thinkphp6 Command 來運(yùn)行Workerman 是不是需要再think 里面去捕獲這個(gè)錯(cuò)誤

  • walkor 2024-11-22

    https://github.com/walkor/workerman/blob/4.2/Connection/AsyncTcpConnection.php
    復(fù)制這個(gè)文件覆蓋你本地的,然后重啟試下

  • Jack997 2024-11-22

    可以了 加的這行生效了 restore_error_handler()

  • Jack997 2024-11-22

    這是是不是意味著 在其他地方設(shè)置的 set_error_handler() 導(dǎo)致調(diào)用位置發(fā)生了改變

  • walkor 2024-11-22

    應(yīng)該tp是設(shè)置了 set_error_handler 并拋出了異常的

??