/** * 发送请求 * @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; }
/** * 发送请求 * @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; }
/** * 发送请求 * @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; }