hprose 1.0 内部数据标准

方法的描述  {
    // 请求调用格式
    'C'.writeString('method1').'a'.count($params).'{'.'m'.count($params)'{'. xxx .'}'.'}'.'z'
    
    // 请求返回格式
    'R'.serialize($result).'z'
}

// 数据类型的描述
serialize == {
    null == {
        writeNull() --->  'n'
    }
    
    is_scalar == {
        writeNaN() --->  'N'
        writeInteger(10) --->  'i10;'
        writeLong(2000) --->  'l2000;'
        writeBoolean(true) --->  't'  或者  'f'
        writeDouble(3.6) --->  'd000;'
        writeDouble(正无穷大、负无穷大) --->  'I+' 或者 'I-'
        writeEmpty() --->  'e'
        writeUTF8Char($val) --->  'u'.''
        writeStringWithRef($val) --->  writeString($val)
        writeBytes($bytes)  --->  'b'.strlen($bytes).'"'.$bytes.'"'
        writeBytesWithRef($val)  --->  writeBytes($bytes);
        writeString($str) --->  's'.(strlen(iconv('UTF-8', 'UTF-16LE', $str)) >> 1).'"'.$str.'"'
    }

is_array == {
        writeArray($array) --->  'a'.count($array)'{'. xxx .'}'
        writeAssocArray($map) --->  'm'.count($map)'{'. xxx .'}'
    }

is_object == {
        writeDateTime($datetime) --->  $datetime->format('\DYmd\THis.u\Z')
        writeMapWithRef($val) --->   writeMap($val)  --->  'm'.count($val)'{'. xxx .'}'
        writeListWithRef($val) --->  writeList($val) --->  'a'.count($val)'{'. xxx .'}'
        writeStdClassWithRef($val) --->  writeStdClass($obj)  --->  'm'.count($val)'{'. xxx .'}'
        writeObjectWithRef($val) --->  writeObject($obj)  --->  {
            $class = get_class($obj); // 'Dir1\Dir2\Clazz1';
            $alias = 'Dir1_Dir2_Clazz1'
            ---> 'c'.(strlen(iconv('UTF-8', 'UTF-16LE', $alias)) >> 1).'"'.$alias.'"'.count($props).'{'.writeString(strtolower($prop[0]) . substr($prop, 1)).'}'.'o'.'0'.'{'.$prop->getValue($obj).'}'
        }
    }
}

hprose 1.0(rpc 框架) - 内部数据标准的更多相关文章

  1. RPC框架实现

    转载RPC框架实现 RPC(Remote Procedure Call,远程过程调用)框架是分布式服务的基石,实现RPC框架需要考虑方方面面.其对业务隐藏了底层通信过程(TCP/UDP.打包/解包.序 ...

  2. Spark RPC框架源码分析(二)RPC运行时序

    前情提要: Spark RPC框架源码分析(一)简述 一. Spark RPC概述 上一篇我们已经说明了Spark RPC框架的一个简单例子,Spark RPC相关的两个编程模型,Actor模型和Re ...

  3. 智能 RPC框架 (C++)

    RPC中文叫远程函数调用,它是一种通信方式,只是看起来像普通的函数调用. 它包括三个基本要素: 1:服务端注册相应的(服务)函数(用于调用方调用) 2:调用方通过函数调用的方式将一些信息和参数打包到消 ...

  4. NetCore平台下使用RPC框架Hprose

    NetCore下使用RPC框架Hprose https://www.jianshu.com/p/c903fca44d5d Hprose是国内非常优秀的RPC框架,和其它RPC框架比较起来,其它框架一般 ...

  5. Spark2.1.0——内置RPC框架详解

    Spark2.1.0——内置RPC框架详解 在Spark中很多地方都涉及网络通信,比如Spark各个组件间的消息互通.用户文件与Jar包的上传.节点间的Shuffle过程.Block数据的复制与备份等 ...

  6. .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序

    .NET 跨平台RPC框架DotNettyRPC   DotNettyRPC 1.简介 DotNettyRPC是一个基于DotNetty的跨平台RPC框架,支持.NET45以及.NET Standar ...

  7. Apache thrift - 使用,内部实现及构建一个可扩展的RPC框架

    本文首先介绍了什么是Apache Thrift,接着介绍了Thrift的安装部署及如何利用Thrift来实现一个简单的RPC应用,并简单的探究了一下Thrift的内部实现原理,最后给出一个基于Thri ...

  8. 高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架

    在过去持续分享的几十期阿里Java面试题中,几乎每次都会问到Dubbo相关问题,比如:“如何从0到1设计一个Dubbo的RPC框架”,这个问题主要考察以下几个方面: 你对RPC框架的底层原理掌握程度. ...

  9. RPC框架从0到10

    RPC(Remote Procedure Call) 从单机走向分布式,产生了很多分布式的通信方式 最古老也是最有效,并且永不过时的,TCP/UDP的二进制传输,事实上所有的通信方式归根结底都是TCP ...

随机推荐

  1. JavaScript 浮点数处理

    众所周知,JavaScript 浮点数运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果,如 0.1+0.2=0.30000000000000004.1-0.9=0. ...

  2. 《从0到1学习Flink》—— 介绍Flink中的Stream Windows

    前言 目前有许多数据分析的场景从批处理到流处理的演变, 虽然可以将批处理作为流处理的特殊情况来处理,但是分析无穷集的流数据通常需要思维方式的转变并且具有其自己的术语(例如,"windowin ...

  3. <Linux系统uname命令用法>

    uname命令:操作系统信息的显示 uname 命令主要用于显示操作系统的信息,包括版本.平台的信息. 它的参数主要有以下: -a 显示全部信息 -s 显示内核名称 -n 显示主机名 -r 显示当前系 ...

  4. electron 集成 nedb / sqlite3

    nedb nedb 无法创建文件 // webpack 构建的前提 externals: process.env.web ? {} : { "nedb": "requir ...

  5. Composition or inheritance for delegating page methods?

    引用链接:http://watirmelon.com/2011/01/24/composition-or-inheritance-for-delegating-page-methods/ Compos ...

  6. Docker for mac 安装 kong

    首先安装一个 PostgreSQL,选的版本是 9.5 $ docker run -d --name kong-database \ -p : \ -e "POSTGRES_USER=kon ...

  7. String.format()的用法

    string.format()用法 2011-06-21 14:58:57|  分类: 工作笔记 |  标签:string  format用法   |字号大中小 订阅 1.格式化货币(跟系统的环境有关 ...

  8. font:inherit

    font:inherit 字体的设置 设置所有元素的字体保持一致: 所有元素:*{font:inherit;} /* IE8+ */ body体用percent:body{font:100%/1 sa ...

  9. sublimetext3安装配置

    官网:http://www.sublimetext.com/ 中文官网:http://www.sublimetextcn.com/ 包管理器:https://packagecontrol.io/ins ...

  10. hihoCoder hiho一下 第十二周 #1055 : 刷油漆 (树上DP)

    思路: 只能刷部分节点数m,总节点数n.如果m>=n那么就可以全刷了,那就不用任何算法了.如果m<n那么就要有取舍了.用DP思路,记录下每个节点如果获得到1~m个选择所能获得的最大权值.这 ...