作者 karlet

feat:k线增加ping

@@ -23,6 +23,8 @@ class ExBroker @@ -23,6 +23,8 @@ class ExBroker
23 private OkxApi $api; 23 private OkxApi $api;
24 private ?Websocket $wsAcc; 24 private ?Websocket $wsAcc;
25 private ?Websocket $wsKline; 25 private ?Websocket $wsKline;
  26 + private $timerAccPing = 0;
  27 + private $timerKlinePing = 0;
26 28
27 public function __construct($apiInfo) 29 public function __construct($apiInfo)
28 { 30 {
@@ -47,12 +49,15 @@ class ExBroker @@ -47,12 +49,15 @@ class ExBroker
47 $this->wsAcc->connect( 49 $this->wsAcc->connect(
48 $onOpen = function () { 50 $onOpen = function () {
49 $this->wsLogin(); 51 $this->wsLogin();
  52 + //开始定时ping
  53 + $this->wsAccPing();
50 }, 54 },
51 $onMessage = function ($data) use ($onWsData) { 55 $onMessage = function ($data) use ($onWsData) {
52 $this->onWsDataPre($data, $onWsData); 56 $this->onWsDataPre($data, $onWsData);
53 }, 57 },
54 $onClose = function () { 58 $onClose = function () {
55 // 关闭链接 59 // 关闭链接
  60 + swoole_timer_clear($this->timerAccPing);
56 } 61 }
57 ); 62 );
58 } 63 }
@@ -74,6 +79,8 @@ class ExBroker @@ -74,6 +79,8 @@ class ExBroker
74 ]; 79 ];
75 output("订阅", $subData); 80 output("订阅", $subData);
76 $this->wsKline->push(json_encode($subData)); 81 $this->wsKline->push(json_encode($subData));
  82 + //开始定时ping
  83 + $this->wsKlinePing();
77 }, 84 },
78 $onMessage = function ($data) use ($onData) { 85 $onMessage = function ($data) use ($onData) {
79 $data = json_decode($data, true); 86 $data = json_decode($data, true);
@@ -84,10 +91,23 @@ class ExBroker @@ -84,10 +91,23 @@ class ExBroker
84 $onData($data); 91 $onData($data);
85 }, 92 },
86 $onClose = function () { 93 $onClose = function () {
87 - // 关闭链接 94 + // 关闭链接 关闭定时ping
  95 + swoole_timer_clear($this->timerKlinePing);
88 } 96 }
89 ); 97 );
90 } 98 }
  99 + private function wsKlinePing()
  100 + {
  101 + $this->timerKlinePing = swoole_timer_tick(1000 * 20, function () {
  102 + $this->wsKline->push("ping");
  103 + });
  104 + }
  105 + private function wsAccPing()
  106 + {
  107 + $this->timerAccPing = swoole_timer_tick(1000 * 20, function () {
  108 + $this->wsAcc->push("ping");
  109 + });
  110 + }
91 private function crateWsSign($timeStamp) 111 private function crateWsSign($timeStamp)
92 { 112 {
93 $method = 'GET'; 113 $method = 'GET';