Пример #1
0
function bench($value, $n = 1000000)
{
    $benchmark = new Benchmark();
    $benchmark->add('serialize', function () use(&$value) {
        serialize($value);
    });
    $benchmark->add('json_encode', function () use(&$value) {
        json_encode($value);
    });
    if (function_exists('bin_encode')) {
        $benchmark->add('bin_encode', function () use(&$value) {
            bin_encode($value);
        });
    }
    if (function_exists('bson_encode')) {
        $benchmark->add('bson_encode', function () use(&$value) {
            bson_encode($value);
        });
    }
    if (function_exists('msgpack_pack')) {
        $benchmark->add('msgpack_pack', function () use(&$value) {
            msgpack_pack($value);
        });
    }
    if (function_exists('igbinary_serialize')) {
        $benchmark->add('igbinary_serialize', function () use(&$value) {
            igbinary_serialize($value);
        });
    }
    $benchmark->add('var_export', function () use(&$value) {
        var_export($value, true);
    });
    $benchmark->setCount($n);
    $benchmark->run();
}
Пример #2
0
 /**
  * Encodes given value into the serialized codes in accordance with
  * the predefined codec.
  *
  * @param  mixed $value value to be encoded.
  * @return array array of the encoded strings.
  */
 public function encode($value)
 {
     if (function_exists('msgpack_pack')) {
         return msgpack_pack($value);
     }
     return serialize($value);
 }
Пример #3
0
 public function serialize()
 {
     $payload = array($this->header, $this->name, $this->args);
     $message = $this->envelope ? $this->envelope : array(null);
     array_push($message, msgpack_pack($payload));
     return $message;
 }
Пример #4
0
 public static function toString($json_array, $status = self::JSONRESULT_OK, $start_time = NULL)
 {
     if ($start_time == NULL) {
         $start_time = \SYSTEM\time::getStartTime();
     }
     $json = array();
     $json['querytime'] = round(microtime(true) - $start_time, 5);
     $json['status'] = $status;
     $json['result'] = $json_array;
     if (\SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DEFAULT_RESULT) == \SYSTEM\CONFIG\config_ids::SYS_CONFIG_DEFAULT_RESULT_MSGPACK) {
         //send Header
         \SYSTEM\HEADER::JSON();
         if ($json = msgpack_pack($json)) {
             return $json;
         }
         throw new \SYSTEM\LOG\ERROR('MSGPack could not be encoded');
     } else {
         //send Header
         \SYSTEM\HEADER::JSON();
         if ($json = json_encode($json)) {
             return $json;
         }
         throw new \SYSTEM\LOG\ERROR('JSON could not be encoded');
     }
 }
Пример #5
0
 /**
  * Serializes the data
  *
  * @param array &$data data to be serialized
  *
  * @return int length of generated string
  */
 public function serialize(&$data)
 {
     $data[0] = Helper::uuidToBin($data[0]);
     $data[1] = Helper::uuidToBin($data[1]);
     $data = msgpack_pack($data);
     return mb_strlen($data, 'ISO-8859-1');
 }
Пример #6
0
 /**
  * @param mixed $input
  * @return string
  * @throws \Exception
  */
 public function encode($input)
 {
     if (function_exists('msgpack_pack')) {
         return self::MARKER . msgpack_pack($input);
     }
     throw new \Exception('msgpack not installed');
 }
 public function serialize($data)
 {
     if (!function_exists('msgpack_pack')) {
         throw new \Exception('msgpack extension must be installed!');
     }
     return msgpack_pack($data);
 }
Пример #8
0
 public function oneway_request($method, $params = null, $expiry = null, $extras = null)
 {
     $ref = ++self::$sequence % 1073741824;
     $frames[] = '';
     $frames[] = self::VERSION;
     $frames[] = msgpack_pack(array($ref, microtime(true), $expiry));
     $frames[] = $this->spID ? ":{$this->spID}:{$method}" : $method;
     $frames[] = msgpack_pack($params);
     if ($this->sender) {
         $frames[] = msgpack_pack(array('Sender', $this->sender));
     }
     if ($this->spVer) {
         $frames[] = msgpack_pack(array('Version', $this->spVer));
     }
     if (is_array($extras)) {
         foreach ($extras as $extra) {
             $frames[] = msgpack_pack($extra);
         }
     }
     if ($this->socket->sendmulti($frames, ZMQ::MODE_DONTWAIT) == false) {
         APF::get_instance()->get_logger()->error('APS[send]:error');
         return false;
     }
     return $ref;
 }
Пример #9
0
 public function handleRequest()
 {
     $args = func_get_args();
     $data = $args[0];
     //TODO 简单实用 msgpack
     //FIXME 数据传输协议依赖swoole 底层组包功能,此处不在检查数据完整
     $datastr = substr($data, 4);
     $params = (object) msgpack_unpack($datastr);
     if (empty($params->op)) {
         $params->op = 'main.main';
     }
     //TODO 这里的处理应该完善点
     list($ctrl, $method) = explode('.', $params->op);
     $className = $this->getCtrlNamespace() . '\\' . ucfirst($ctrl) . 'Ctrl';
     $ctrl = new $className();
     $ctrl->setParams($params);
     //发送msgpack编码数据,头部为数据长度
     $result = $ctrl->{$method}();
     if (Ping::$server->debug) {
         echo "swoole handle request:\n";
         echo "\tctrl: {$ctrl} method: {$method}\n";
         echo "\tparams:\n\t\t" . json_encode($params) . "\n";
         echo "\tresponse:\n\t\t" . json_encode($result) . "\n";
         echo "\n\n";
     }
     $rawResult = msgpack_pack($result);
     $rawResult = pack('N1', strlen($rawResult));
     return $rawResult;
 }
Пример #10
0
 public function packData($var, $bool = true, $option = array())
 {
     $option += array('packer' => $this->option['packer']);
     switch ($option['packer']) {
         case BoxConstants::ENCODER_JSON:
             if ($bool == true) {
                 return json_encode($var);
             } else {
                 return json_decode($var, true);
             }
             break;
         case BoxConstants::ENCODER_MSGPACK:
             if ($bool == true) {
                 return msgpack_pack($var);
             } else {
                 return msgpack_unpack($var);
             }
             break;
         case BoxConstants::ENCODER_SERIALIZE:
         default:
             if ($bool == true) {
                 return serialize($var);
             } else {
                 return unserialize($var);
             }
             break;
     }
 }
 /**
  * pack entity with msgpack protocol.
  * {@link https://github.com/msgpack/msgpack-php}
  * @param Entity $entity
  * @return string
  */
 public function pack(Entity $entity)
 {
     if (function_exists('msgpack_pack')) {
         return msgpack_pack(array($entity->getTag(), $entity->getTime(), $entity->getData()));
     } else {
         return json_encode(array($entity->getTag(), $entity->getTime(), $entity->getData()));
     }
 }
/**
 * File    libraries\Function\parse_config.func.php
 * Desc    生成随机字符串
 * Manual  svn://svn.vop.com/api/manual/Function/parse_config
 * version 1.0.0
 * User    duanchi <http://weibo.com/shijingye>
 * Date    2013-12-09
 * Time    16:32
 */
function mk_serial_package($_api, $_mvno, $_request_serial)
{
    $_push_url = \DB\KV::get($_mvno['mvnokey'] . ':PUSHURL', MEM_DB_SERIAL);
    empty($_push_url) || $_push_url == FALSE ? $_push_url = 'no://url' : FALSE;
    //组装 push_url;
    //$_push_url = (isset($_mvno['push.'.$_api['apikey']]) && !empty($_mvno['push.'.$_api['apikey']]) ? $_mvno['push.'.$_api['apikey']] : FALSE);
    return msgpack_pack(['mvno' => [$_mvno['mvnokey'], $_push_url], 'api' => $_api['apikey'], 'serial' => $_request_serial]);
}
Пример #13
0
 public function testNext()
 {
     $io = m::mock(Io::class);
     $io->shouldReceive('read')->andReturn(msgpack_pack(array(1, 2, 3)) . msgpack_pack(array('a' => 1)));
     $messenger = new MsgpackMessenger($io);
     $msg = $messenger->next();
     self::assertEquals(array(1, 2, 3), $msg);
     $msg = $messenger->next();
     self::assertEquals(array('a' => 1), $msg);
 }
Пример #14
0
function make_token($xid)
{
    // make access token
    date_default_timezone_set('Asia/Seoul');
    $config = config_get();
    $extra_data = array('service_key' => $config['service_key'], 'version' => $config['version']);
    $expire_date = date(strtotime('+7 day'));
    $access_token_data = array('xid' => $xid, 'expire' => $expire_date, 'data' => $extra_data);
    return base64_encode(msgpack_pack($access_token_data));
}
Пример #15
0
 /**
  * {@inheritdoc}
  */
 public function pack(Request $request, $sync = null)
 {
     // @see https://github.com/msgpack/msgpack-php/issues/45
     $content = pack('C*', 0x82, IProto::CODE, $request->getType(), IProto::SYNC);
     $content .= msgpack_pack((int) $sync);
     if (null !== ($body = $request->getBody())) {
         $content .= msgpack_pack($body);
     }
     return PackUtils::packLength(strlen($content)) . $content;
 }
Пример #16
0
function test($type, $variable, $test = null)
{
    $serialized = msgpack_pack($variable);
    $unserialized = msgpack_unpack($serialized);
    var_dump($unserialized);
    if (!is_bool($test)) {
        echo $unserialized === $variable ? 'OK' : 'ERROR', PHP_EOL;
    } else {
        echo $test || $unserialized == $variable ? 'OK' : 'ERROR', PHP_EOL;
    }
}
Пример #17
0
function test($type, $variable, $object, $result = null)
{
    $serialized = msgpack_pack($variable);
    $unserialized = msgpack_unpack($serialized, $object);
    var_dump($unserialized);
    if ($result) {
        echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL;
    } else {
        echo 'SKIP', PHP_EOL;
    }
}
Пример #18
0
function test($type, $var)
{
    echo "================\n" . $type . "\n";
    $e = msgpack_pack($var);
    $d = msgpack_unpack($e);
    echo "\t" . bin2hex($e) . "\t" . $e . "\n\t";
    echo str_replace("\n", "\n\t", var_export($d, true)) . "\n";
    if ($var === $d) {
        echo "PASS\n";
    } else {
        echo "FAIL\n";
    }
}
Пример #19
0
 /**
  * 序列化PHP的数据结构(如果是序列化对象,请不要使用json序列).
  * 
  * @param array  $data 需要序列化的数据.
  * @param string $type 序列化方式.
  *
  * @return string
  */
 protected function serializeData(array $data = array(), $type = self::SERIALIZE_BY_MSGPACK)
 {
     if (!$data) {
         $data = array();
     }
     $dataString = '';
     if ($type == self::SERIALIZE_BY_JSON) {
         $dataString = json_encode($data);
     } elseif ($type == self::SERIALIZE_BY_PHP) {
         $dataString = serialize($data);
     } else {
         $dataString = msgpack_pack($data);
     }
     return $dataString;
 }
Пример #20
0
 /**
  * Sets a cache item to the given data, tags, and lifetime.
  *
  * @param   string   cache id to set
  * @param   string   data in the cache
  * @param   array    cache tags
  * @param   integer  lifetime
  * @return  bool
  */
 public function set($id, $data, array $tags = NULL, $lifetime)
 {
     // Remove old cache files
     $this->delete($id);
     // Cache File driver expects unix timestamp
     if ($lifetime !== 0) {
         $lifetime += time();
     }
     if (!empty($tags)) {
         // Convert the tags into a string list
         $tags = implode('+', $tags);
     }
     // Write out a serialized cache
     return (bool) file_put_contents($this->directory . $id . '~' . $tags . '~' . $lifetime . '.msgpack', msgpack_pack($data));
 }
Пример #21
0
 protected function encodeVal($val)
 {
     switch ($this->defaultOption['encode']) {
         case 'json':
             return json_encode($val);
             break;
         case 'msgpack':
             return msgpack_pack($val);
             break;
         case 'serialize':
         default:
             return serialize($val);
             break;
     }
 }
Пример #22
0
 public function tryBufDataSend($buffer = null)
 {
     $pm = msgpack_pack($buffer);
     if ($this->iscn) {
         $this->sock->tryMsgPackSend($pm);
     } else {
         $this->pendingMsgs[] = $pm;
         // TODO: Socket Stream
         if (!$this->isop) {
             $this->sock->tryConnOpening();
         }
         // TODO: Socket Stream
         if (!$this->isop) {
             $this->sock->isop = false;
         }
         // TODO: Where TCPSocket#isop
     }
 }
/**
 * File    libraries\Function\pre_process_request.func.php
 * Desc    请求预处理函数
 * Manual  svn://svn.vop.com/api/manual/Function/pre_process_request
 * version 1.0.0
 * User    duanchi <http://weibo.com/shijingye>
 * Date    2013-11-12
 * Time    17:55
 */
function return_package($_object = NULL, $_data_type = TYPE_NULL, $_callback = NULL)
{
    $_result = NULL;
    switch ($_data_type) {
        /*case TYPE_JSONP:
        		$_result = ($_callback == NULL ? '' : $_callback) .'('.json_encode($_object, JSON_PRETTY_PRINT + JSON_UNESCAPED_UNICODE).');';
        		break;*/
        case TYPE_MSGPACK:
            $_result = msgpack_pack($_object);
            break;
        case TYPE_JSON:
            $_result = json_encode($_object);
            break;
        default:
            break;
    }
    echo $_result;
}
Пример #24
0
 public function indexAction()
 {
     $socket = System_Socket::create(AF_INET, SOCK_STREAM, SOL_TCP);
     $socket->connect('127.0.0.1', 8021);
     $in = array('gamedb', 'entity_hs_card_zhcn', array("key", 1));
     $in = msgpack_pack($in);
     $socket->write($in, strlen($in));
     $out = '';
     $res = '';
     while (true) {
         $out = $socket->read(1024, PHP_NORMAL_READ);
         if ($out === false) {
             break;
         }
         $res .= $out;
     }
     DebugTools::print_r($res);
     return false;
 }
Пример #25
0
function bench($value, $n = 1000000)
{
    $benchmark = new Benchmark();
    $serialized = serialize($value);
    $benchmark->add('unserialize', function () use(&$serialized) {
        unserialize($serialized);
    });
    $jsonEncoded = json_encode($value);
    $benchmark->add('json_decode', function () use(&$jsonEncoded) {
        json_decode($jsonEncoded);
    });
    if (function_exists('bin_decode')) {
        $binEncoded = bin_encode($value);
        $benchmark->add('bin_decode', function () use(&$binEncoded) {
            bin_decode($binEncoded);
        });
    }
    if (function_exists('bson_decode')) {
        $bsonEncoded = bson_encode($value);
        $benchmark->add('bson_decode', function () use(&$bsonEncoded) {
            bson_decode($bsonEncoded);
        });
    }
    if (function_exists('msgpack_pack')) {
        $msgPack = msgpack_pack($value);
        $benchmark->add('msgpack_unpack', function () use(&$msgPack) {
            msgpack_unpack($msgPack);
        });
    }
    if (function_exists('igbinary_unserialize')) {
        $igbinarySerialized = igbinary_serialize($value);
        $benchmark->add('igbinary_unserialize', function () use(&$igbinarySerialized) {
            igbinary_unserialize($igbinarySerialized);
        });
    }
    $benchmark->setCount($n);
    $benchmark->run();
}
Пример #26
0
 /**
  * Generate Payload Data
  *
  * @param string $payload
  * @param string $container
  *
  * @throws ResponderException
  *
  * @return array
  */
 public function generate($payload, $container = 'data')
 {
     if (function_exists('msgpack_pack')) {
         if ($payload) {
             $prevHandler = set_error_handler(function ($errno, $errstr, $errfile, $errline, $errcontext) {
                 throw new ResponderException('Failed To Generate MSGPack');
                 // @codeCoverageIgnore
             });
             $msg = msgpack_pack([$container => $payload]);
             if (!$msg) {
                 set_error_handler($prevHandler);
                 // @codeCoverageIgnore
                 throw new ResponderException('Failed To Generate MSGPack');
                 // @codeCoverageIgnore
             }
             set_error_handler($prevHandler);
             return $msg;
         }
         return '';
     }
     throw new ResponderException('Failed To Generate MSGPack - Supporting Library Not Available');
     // @codeCoverageIgnore
 }
Пример #27
0
 public function dispatchLoopShutdown(\Yaf\Request_Abstract $request, \Yaf\Response_Abstract $response)
 {
     if ($request->controller == 'Api') {
         $_REQUEST = \Core\KEY::get('_REQUEST');
         $_RESPONSE = \Core\KEY::get('_RESPONSE');
         $_ECHO = '';
         switch ($_REQUEST['content-type']) {
             /*case TYPE_JSONP:
               $_result = ($_callback == NULL ? '' : $_callback) .'('.json_encode($_object, JSON_PRETTY_PRINT + JSON_UNESCAPED_UNICODE).');';
               break;*/
             case TYPE_MSGPACK:
                 $_ECHO = msgpack_pack($_RESPONSE);
                 break;
             case TYPE_JSON:
                 $_ECHO = json_encode($_RESPONSE);
                 break;
             default:
                 break;
         }
         \Core\RESPONSE::initialize($response, RESPONSE_TYPE_YAF);
         \Core\RESPONSE::set($_ECHO, RESPONSE_TYPE_BODY);
         \Core\RESPONSE::respond();
     }
 }
Пример #28
0
/**
 * 测试数据发送
 *
 * @param      $op
 * @param bool $http
 *
 * @return string
 */
function getSendData($op, $http = false)
{
    $ret = '';
    if ($http) {
        $ret = "GET /hello.html HTTP/1.1\r\n";
        $ret .= "Host: 127.0.0.1\r\n";
        $ret .= "Connection: keep-alive\r\n";
        $ret .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,\n        image/webp,*/*;q=0.8\r\n";
        $ret .= "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,\n        like Gecko) Chrome/34.0.1847.116 Safari/537.36\r\n\r\n";
        return $ret;
    }
    $data = ['system.gmCreatePlayer' => [], 'system.login' => ['openId' => 'zhituo3', 'token' => '123456', 'platform' => 0, 'devId' => ''], 'role.createRole' => ['roleName' => 'testName' . uniqid()], 'role.getRole' => ['roleId' => 1]];
    if (!isset($data[$op])) {
        return '';
    }
    $obj = new stdClass();
    $obj->op = $op;
    foreach ($data[$op] as $k => $v) {
        $obj->{$k} = $v;
    }
    $msgpack = msgpack_pack($obj);
    $len = pack('N1', strlen($msgpack));
    return $ret = $len . $msgpack;
}
Пример #29
0
 public static function pack($mixed)
 {
     return msgpack_pack($mixed);
 }
Пример #30
0
 /**
  */
 public function pack($data)
 {
     return msgpack_pack($data);
 }