/** * 实体的对象转换为mcpack包 * * @return array 转换后的数组 */ public function toMcpack() { $arr = $this->_value($this); $ret = Util::mcpack_normal($arr); if ($ret === false) { return false; } return mc_pack_array2pack($ret); }
<?php $url = 'http://127.0.0.1:8080/'; $arrData = array('uiControl' => array('type' => 'detect', 'templateName' => 'baidu', 'templateType' => 'baidu', 'templateNone' => true, 'language' => 'zh-CN', 'encKeyStr' => 'hello_xiaoshuai_baidu_zuodan_baidu', 'maxRandomStrLen' => 3)); $context['http'] = array('method' => 'POST', 'content' => mc_pack_array2pack($arrData)); $rst = file_get_contents($url, false, stream_context_create($context)); if (empty($rst)) { exit(1); }
protected function _serialize($arrInput) { $mcpack = mc_pack_array2pack($arrInput); $nshead = $this->_packNshead(strlen($mcpack)); return $nshead . $mcpack; }
/** * 将url、post中的参数打包起来传给us * 我只是从ui移植到vui * * @param $strUrlParam unknown_type * @param $strPostData unknown_type * @param $strTemplateNameMod unknown_type */ public function packUrlParam($strUrlParam, $strPostData, $strTemplateNameMod, $arrCookieInfo) { $intOpenAdvancedModify = Util::getConf('/view-ui', 'GLOBAL/OPEN_ADVANCED_MODIFY'); if ($intOpenAdvancedModify < 1) { $intOpenAdvancedModify = OPEN_ADVANCED_MODIFY; } $arrQueryPart = array(); if (!empty($strUrlParam)) { $intSplit = strpos($strUrlParam, '?'); if ($intSplit !== false) { $strQueryInfo = substr($strUrlParam, $intSplit + 1); $arrQueryPart = self::URLRewiteAdvance($strQueryInfo, $intOpenAdvancedModify); } } $arrPostData = array(); parse_str($strPostData, $arrPostData); unset($arrPostData['f']); if (!empty($strTemplateNameMod) && !empty($arrPostData['tn'])) { $arrPostData['tn'] = $strTemplateNameMod; } if (!is_array($arrQueryPart)) { $arrQueryPart = array(); } //加入对safe参数的校验 // if(isset($arrQueryPart['baidu_safe'])){ // if($arrQueryPart['baidu_safe'] == 1|| $arrQueryPart['baidu_safe'] == 0){ // $arrQueryPart['baidu_safe'] = intval($arrQueryPart['baidu_safe']); // }else{ // unset($arrQueryPart['baidu_safe']); // } // } if (!is_array($arrPostData)) { $arrPostData = array(); } $arr = array_merge($arrQueryPart, $arrPostData); if (!empty($arrCookieInfo)) { $arr = array_merge($arr, $arrCookieInfo); } foreach ($arr as $key => $value) { if ($value == '') { //value类型均为string,包括0 unset($arr[$key]); } } $arr = Util::mcpack_normal($arr); $str = mc_pack_array2pack($arr); return $str; }
private function talkWithServer2($logid_int, $query_arr) { $handler = $this->_getHandler(); if (!$handler) { $this->_last_errno = ZCACHE_CLIENT_ERR_CONNECT; $this->_last_errmsg = "net connect err"; return false; } $query_pack = mc_pack_array2pack($query_arr, $this->zcfObj->MCPACK_VERSION); $buffer = $this->_makeNshead($logid_int, $query_pack); return $this->_talkWithServer($handler, $buffer); }
#!/usr/bin/env php <?php require_once dirname(dirname(__FILE__)) . '/init_env.php'; require_once Da\Sys_App::lib_path("CNsHead.class.php"); $opt = getopt('h::p::', ['2json', '2sp']); $host = isset($opt['h']) ? $opt['h'] : '0.0.0.0'; $port = isset($opt['p']) ? $opt['p'] : '8765'; $socket = stream_socket_server("tcp://{$host}:{$port}", $errno, $errstr); echo 'Listening at port: ' . $port . PHP_EOL; if (!$socket) { echo "{$errstr} ({$errno})\n"; } else { while ($conn = stream_socket_accept($socket, 86400)) { $ns = new NsHead(); $data = $ns->nshead_read($conn); $result = mc_pack_pack2array($data['buf']); isset($opt['2json']) ? print json_encode($result) : (isset($opt['2sp']) ? print serialize($result) : print_r($result)); echo PHP_EOL; $data = ['errno' => 0, 'data' => 'ok']; $body = mc_pack_array2pack($data); $hdr = array('body_len' => strlen($body)); $ns->nshead_write($conn, $hdr, $body); } }
private function _gen_idl_pack() { // response包 $res_arr = array(); $idl_qudata = new idl_queue_data_t(); $idl_qudata->seterr_no(0); $idl_qudata->setqueue_name($this->que_name); $idl_qudata->setpipe_name('pipe'); $idl_qudata->setpipelet_id(2); $idl_qudata->setpipelet_msg_id(65535); $idl_qudata->setseq_id(9527); $idl_qudata->setmsg_body('Testing Queue Client'); $idl_qudata->save($res_arr); $res_pkg = mc_pack_array2pack($res_arr); $idl_qudata->seterr_no(10); $idl_qudata->seterr_msg('Test error mesage return'); $res_errmsg_arr = array(); $idl_qudata->save($res_errmsg_arr); $res_errmsg_pkg = mc_pack_array2pack($res_errmsg_arr); // reuqire包 $wnd_size = 30; $req_arr = array(); $idl_req = new idl_queue_req_t(); $idl_req->setcmd_no(BigpipeQueueSvrCmdType::REQ_QUEUE_DATA); $idl_req->setqueue_name($this->que_name); $idl_req->settoken($this->token); $idl_req->setwindow_size($wnd_size); $idl_req_arr = array(); $idl_req->save($req_arr); $req_pkg = mc_pack_array2pack($req_arr); return array('res' => $res_pkg, 'res_err' => $res_errmsg_pkg, 'req' => $req_pkg); }
protected function call_acm($group_key, $key, $sub_key = null) { $acm_zk_path = $this->conf['zk_path'] . '/acm'; $zk_expire = $this->conf['zk_expire']; $acm_conf = Ak_Zookeeper::getCached($acm_zk_path, 2, $zk_expire, 'Ak_McClient::checkAcmConf'); if (!is_array($acm_conf)) { Ak_Log::warning("acm zk conf formate error!"); return false; } for ($i = 1; $i <= $acm_conf['acm_idc_num']; ++$i) { $server_name = "server{$i}"; if (!is_array($acm_conf['children'][$server_name])) { Ak_Log::warning("acm {$server_name} not exist!"); continue; } $server_conf = $acm_conf['children'][$server_name]; $this->span_idc->registerResource(self::ACM_RESOURCE, $server_conf['idc'], $server_name); } $resources = $this->span_idc->getResource($this->conf['span_idc_strategy_index'], self::ACM_RESOURCE, $this->conf['curr_idc']); if (count($resources) == 0) { Ak_Log::warning("get resources is empty!"); return false; } foreach ($resources as $server_name) { $acm_path = $this->conf['zk_path'] . "/acm/{$server_name}"; $aclient_conf = array('Source' => 'Galileo', 'Protocol' => 'Nshead', 'Scheduler' => 'Closest', 'GalileoConf' => array('Path' => $acm_path), 'ClosestConf' => array('AlwaysRetry' => true), 'NsheadConf' => array('ConnectTimeOut' => $this->conf['acm_connect_timeout'], 'WriteTimeOut' => $this->conf['acm_write_timeout'], 'ReadTimeOut' => $this->conf['acm_read_timeout'])); $client = new Ak_AClient(); $client->SetConf($aclient_conf); $idc_list = array(); for ($i = 0; $i < $this->zk_conf['idc_num']; $i++) { $idc_list[] = $i; } $data = array('command_no' => $this->zk_conf['delete_cmd'], 'pid' => $this->conf['pid'], 'group_key' => (string) $group_key, 'key' => (string) $key, 'idc_list' => $idc_list); if ($sub_key !== null) { $data['has_sub_key'] = 1; $data['sub_key'] = $sub_key; } $input = array('body' => mc_pack_array2pack($data, PHP_MC_PACK_V2)); $output = $client->Call($input); if ($output == null) { Ak_Log::warning("aclient call acm [{$server_name}] failed"); } else { $res = mc_pack_pack2array($output['body']); if ($res['error_no'] !== 0) { Ak_Log::warning("call acm [{$server_name}] output err_no is {$res['errno']}"); } else { return true; } } } return false; }