Esempio n. 1
0
 /**
  * 发送请求
  * @param $type
  * @param $send
  * @param SOA_result $retObj
  * @return bool
  */
 protected function request($type, $send, $retObj)
 {
     $socket = new \Swoole\Client\TCP();
     $retObj->socket = $socket;
     $retObj->type = $type;
     $retObj->send = $send;
     $svr = $this->getServer();
     //异步connect
     //TODO 如果连接失败,需要上报机器存活状态
     $ret = $socket->connect($svr['host'], $svr['port'], $this->timeout);
     //使用SOCKET的编号作为ID
     $retObj->id = (int) $socket->get_socket();
     if ($ret === false) {
         $retObj->code = SOA_Result::ERR_CONNECT;
         unset($retObj->socket);
         return false;
     }
     //请求串号
     $retObj->requestId = self::getRequestId();
     //发送失败了
     if ($retObj->socket->send(SOAServer::encode($retObj->send, SOAServer::DECODE_PHP, 0, $retObj->requestId)) === false) {
         $retObj->code = SOA_Result::ERR_SEND;
         unset($retObj->socket);
         return false;
     }
     //加入wait_list
     if ($type != self::TYPE_ASYNC) {
         $this->wait_list[$retObj->id] = $retObj;
     }
     return true;
 }
Esempio n. 2
0
 /**
  * 发送请求
  * @param $type
  * @param $send
  * @param SOA_result $retObj
  * @return bool
  */
 protected function request($type, $send, $retObj)
 {
     $this->beforeRequest($retObj);
     $ret = false;
     $socket = null;
     $svr = null;
     //循环连接
     while (count($this->servers) > 0) {
         $svr = $this->getServer();
         $socket = new TCP();
         $socket->try_reconnect = false;
         $ret = $socket->connect($svr['host'], $svr['port'], $this->timeout);
         //连接被拒绝,证明服务器已经挂了
         //TODO 如果连接失败,需要上报机器存活状态
         if ($ret === false and $socket->errCode == 111) {
             $this->onConnectServerFailed($svr);
         } else {
             break;
         }
     }
     $retObj->socket = $socket;
     $retObj->type = $type;
     $retObj->send = $send;
     $retObj->server_host = $svr['host'];
     $retObj->server_port = $svr['port'];
     //使用SOCKET的编号作为ID
     $retObj->id = (int) $socket->get_socket();
     if ($ret === false) {
         $retObj->code = SOA_Result::ERR_CONNECT;
         unset($retObj->socket);
         return false;
     }
     //请求串号
     $retObj->requestId = self::getRequestId();
     //发送失败了
     if ($retObj->socket->send(SOAServer::encode($retObj->send, SOAServer::DECODE_PHP, 0, $retObj->requestId)) === false) {
         $retObj->code = SOA_Result::ERR_SEND;
         unset($retObj->socket);
         return false;
     }
     //加入wait_list
     if ($type != self::TYPE_ASYNC) {
         $this->wait_list[$retObj->id] = $retObj;
     }
     return true;
 }
Esempio n. 3
0
 /**
  * 发送请求
  * @param $send
  * @param SOA_result $retObj
  * @return bool
  */
 protected function request($send, $retObj)
 {
     $retObj->send = $send;
     $this->beforeRequest($retObj);
     $retObj->index = $this->requestIndex++;
     if ($this->connectToServer($retObj) === false) {
         $retObj->code = SOA_Result::ERR_CONNECT;
         return false;
     }
     //请求串号
     $retObj->requestId = self::getRequestId();
     //发送失败了
     if ($retObj->socket->send(SOAServer::encode($retObj->send, SOAServer::DECODE_PHP, 0, $retObj->requestId)) === false) {
         $retObj->code = SOA_Result::ERR_SEND;
         unset($retObj->socket);
         return false;
     }
     //加入wait_list
     $this->waitList[$retObj->id] = $retObj;
     return true;
 }