callWebSocet('{"msg":"getnodelist"}'); $this->nodeinfo=$nodeinfo; } public function ping($host,$count) { $ping = $this->callWebSocet('{"msg":"ping","target:'.$host.'","type":"ICMP","count":'.$count.'}'); foreach($this->nodeinfo as $node){ $ping[$node->nodeid]['nodeinfo']=$node; } $this->ping=$ping; } public function getDelay() { $alldelay = 0; foreach($this->ping as $id=>$node){ if((!isset($node['nodeinfo'])) || (!isset($node['delay'])) || $node['delay']<=10){ unset($this->ping[$id]); }else{ $alldelay += $node['delay']; } } $alldelay = $alldelay/count($this->ping); return $alldelay; } private function callWebSocet(){ $client = new Client($this->dest); // 发送消息 $client->send($msg); // 接收消息 while (true) { try { $receive=$client->receive(); $receive = json_decode($receive); if($receive->msg="setnodes"&&isset($receive->nodes)){ $response = $receive->nodes; break; }elseif(isset($receive->delay)){ $response[$receive->nodeid]['delay'] = $receive->delay/1000; }else{ $response[$receive->nodeid]['ip'] = $receive->ip; $response[$receive->nodeid]['loc'] = $receive->loc; $response[$receive->nodeid]['asn'] = $receive->asn; $response[$receive->nodeid]['org'] = $receive->org; } } catch (\WebSocket\ConnectionException $e) { break; } } // 关闭连接 $client->close(); return $response; } }