亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

swoole websocket服務進行mysql斷線重連不生效的問題

swoole websocket服務進行mysql斷線重連不生效的問題

PHP
拉莫斯之舞 2019-03-06 13:04:11
代碼結構大致是這樣的: <?php class server { private $server; private $conn = null; public function __construct() { if (!$this->initDb()) exit("終止啟動\n"); //連接數據庫 $this->server = new swoole_websocket_server('111.111.111.111', 1234); //實例化server //消息 $this->server->on('message', function (swoole_websocket_server $server, $frame) { //這里使用數據庫連接$conn }); //work進程開啟 $this->server->on('workerStart', function (swoole_websocket_server $server, $worker_id) { if ($worker_id == 0) { // 每10秒檢測一次數據庫連接 $server->tick(10 * 1000, function ($timer_id) { if (!$this->conn->ping()) { echo "數據庫已斷開!正在嘗試重新連接...\n"; $this->initDb(); //連接數據庫 } }); } }); $this->server->start(); } // 連接數據庫 private function initDb() { $conn = new mysqli('127.0.0.1', 'root','root','test', 3306); if ($conn->connect_errno) { printf("數據庫連接失敗: %s\n", $conn->connect_error); return false; } else { $conn->set_charset("utf8"); echo "連接數據庫成功!\n"; $this->conn = $conn; return true; } } } new server(); 每十秒檢測mysql連接狀態,如果斷開連接則重新走initDb,this->$conn重新賦值。 然后我手動重啟數據庫,程序檢測到數據庫斷開之后進行重連,并且連接成功。 但是當接收到消息事件使用$conn時,卻還是提示mysql server has gone away,明明已經重新連接了啊。 我猜想,是不是因為swoole server在注冊事件時就綁定了所使用到的變量,所以conn雖然重新賦值了,但是并沒有生效到swoole server里?
查看完整描述

2 回答

  • 2 回答
  • 0 關注
  • 613 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號