ICE的消息编码规则
来源:互联网 发布:野村周平水原希子 知乎 编辑:程序博客网 时间:2024/05/18 13:45
1、代表size的长度字段:
值小于255用1个字节标示,如果大于255则使用5个字节,第一个字节为255,后续的4个字节标示真实长度
2、基本数据类型按照小端序进行实际长度编码
3、字符串被编码成size加utf-8的实际内容,注意不包含结束字符
4、sequence被编码成size加实际元素编码
5、枚举值被按照元素个数来进行字节编码,枚举的第一个元素取值被编码成0
如果枚举元素个数小于128个,那么使用一个字节,小于32768则使用2个字节,否则使用4个字节
6、结构按照成员顺序进行编码
7、异常被按照如下的顺序进行编码:bool + (异常名 + 异常长度 + 异常内容)... + 类编码
(异常名 + 异常长度 + 异常内容)部分按照先子类异常后基类异常的方式进行编码
8、类的编码按照如下顺序进行:实例编号+(类名标示+类名/类编号+类长度+类内容)...
类名标示如果为0,则使用类名、否则使用类索引,按照类名出现的顺序从1开始编号
(类名标示+类名/类编号+类长度+类内容)按照先子类后基类方式编码,注意最后肯定有object基类
9、当碰到指针需要进行编码时,指针使用的实例编号为所指向实例的负值
10、代理被按照如下的方式进行编码:ID + facet + mode + secure + endpoints/adapterid
11、ICE使用如下5类消息:
A、请求消息(messageType:0)
struct RequestData
{
int requestId; // 请求序列号,和应答匹配,0标示单向调用无应答
Ice::Identity id; // 对象标示
Ice::StringSeq facet; // facet名称
string operation; // 操作标示
byte mode; // 调用模式(0=normal, 2=idempotent)
Ice::Context context; // 上下文
Encapsulation params; // 输入参数
};
B、批量请求消息(messageType:1)
struct BatchRequestData
{
Ice::Identity id;
Ice::StringSeq facet;
string operation;
byte mode;
Ice::Context context;
Encapsulation params;
};
C、应答消息(messageType:2)
struct ReplyData
{
int requestId;
byte replyStatus; // 0:成功 用户异常1 对象不存在2 facet不存在3 操作部存在4 未知本地异常5 未知用户异常6 未知异常7
Encapsulation body;
};
D、验证连接消息(messageType:3)
E、关闭连接消息(messageType:4)
12、所有类型消息的公共消息头部分结构如下:
struct HeaderData
{
int magic; // 固定:IceP
byte protocolMajor; // 版本号
byte protocolMinor;
byte encodingMajor;
byte encodingMinor;
byte messageType; // 消息类型
byte compressionStatus; // 压缩标记 0:未压缩 1:未压缩但可以接受压缩应答 2:已压缩可以接受压缩应答
int messageSize; // 消息长度
};
13、小于100个字节的消息是不会进行压缩处理的
值小于255用1个字节标示,如果大于255则使用5个字节,第一个字节为255,后续的4个字节标示真实长度
2、基本数据类型按照小端序进行实际长度编码
3、字符串被编码成size加utf-8的实际内容,注意不包含结束字符
4、sequence被编码成size加实际元素编码
5、枚举值被按照元素个数来进行字节编码,枚举的第一个元素取值被编码成0
如果枚举元素个数小于128个,那么使用一个字节,小于32768则使用2个字节,否则使用4个字节
6、结构按照成员顺序进行编码
7、异常被按照如下的顺序进行编码:bool + (异常名 + 异常长度 + 异常内容)... + 类编码
(异常名 + 异常长度 + 异常内容)部分按照先子类异常后基类异常的方式进行编码
8、类的编码按照如下顺序进行:实例编号+(类名标示+类名/类编号+类长度+类内容)...
类名标示如果为0,则使用类名、否则使用类索引,按照类名出现的顺序从1开始编号
(类名标示+类名/类编号+类长度+类内容)按照先子类后基类方式编码,注意最后肯定有object基类
9、当碰到指针需要进行编码时,指针使用的实例编号为所指向实例的负值
10、代理被按照如下的方式进行编码:ID + facet + mode + secure + endpoints/adapterid
11、ICE使用如下5类消息:
A、请求消息(messageType:0)
struct RequestData
{
int requestId; // 请求序列号,和应答匹配,0标示单向调用无应答
Ice::Identity id; // 对象标示
Ice::StringSeq facet; // facet名称
string operation; // 操作标示
byte mode; // 调用模式(0=normal, 2=idempotent)
Ice::Context context; // 上下文
Encapsulation params; // 输入参数
};
B、批量请求消息(messageType:1)
struct BatchRequestData
{
Ice::Identity id;
Ice::StringSeq facet;
string operation;
byte mode;
Ice::Context context;
Encapsulation params;
};
C、应答消息(messageType:2)
struct ReplyData
{
int requestId;
byte replyStatus; // 0:成功 用户异常1 对象不存在2 facet不存在3 操作部存在4 未知本地异常5 未知用户异常6 未知异常7
Encapsulation body;
};
D、验证连接消息(messageType:3)
E、关闭连接消息(messageType:4)
12、所有类型消息的公共消息头部分结构如下:
struct HeaderData
{
int magic; // 固定:IceP
byte protocolMajor; // 版本号
byte protocolMinor;
byte encodingMajor;
byte encodingMinor;
byte messageType; // 消息类型
byte compressionStatus; // 压缩标记 0:未压缩 1:未压缩但可以接受压缩应答 2:已压缩可以接受压缩应答
int messageSize; // 消息长度
};
13、小于100个字节的消息是不会进行压缩处理的
- ICE的消息编码规则
- ICE的自动编码转换
- GB2312的编码规则
- PEAR 的编码规则
- GB2312的编码规则
- Python的编码规则
- protobuf的编码规则
- protobuf的编码规则
- GB2312的编码规则
- OID的编码规则
- ice学习和编码
- 代码获取编码规则的最新编码
- java 的一些编码规则
- java 的一些编码规则
- SMS的PDU编码规则
- SMS的PDU编码规则
- sms的pdu编码规则
- 关于编码规则的解释
- 谷歌不行啦
- 道听途说Struts2之6:Action通配符 约定优于配置
- struts 输入校验
- asp.net怎么使用repeater
- 第八周任务1:方案二:请用类的友元函数,而不是成员函数,完成上面提及的运算符的重载;
- ICE的消息编码规则
- asp.net 子父窗口 传值
- Exercise 3: Numbers And Math
- Android中的SimpleAdapter
- 回调函数
- U-Boot启动过程分解 2
- Sexagenary Cycle(干支纪年)
- git push 小结
- Java限制格式,只能输入数字的输入框JTextField