BES中间件Spark协议格式

来源:互联网 发布:网络系统集成质量控制 编辑:程序博客网 时间:2024/06/05 11:39

BES中间件Spark协议格式。


报文格式:TCP包头之后报文内容:

内容

长度(Byte)

取值

说明

Spark协议头

5

Spark

报文开头定义

版本号

1

 

Spark的版本号

requestID

4

 

Spark请求的ID

requestLength

4

 

报文体的长度

invocationType

1

(byte) 0

Spark请求类型

serializatiionType

1

Spark: (byte) 0

Java  : (byte) 1

Spark序列化类型

ejbId

8

 

用于定位要调用的EJB,每个EJB会有一个唯一的ID。每个EJB会有多个服务实例,具体的服务实例的定位使用InstanceKey来定位

instanceKeyLength

2

 

用于定位EJB服务实例的InstanceKey的长度

instanceKey

${ instanceKeyLength }

 

InstanceKey用于定位具体的EJB服务实例

remoteBussinessInterfaceId

2

 

EJB3.0对应的远程的接口的ID

com.bes.ejb.spark.tcp.InvocationRequest
对象的序列化数据

*

 

InvocationRequest携带的方法名和方法参数

对象序列化类型格式:

类型

表示形式

起始标记

长度(byte)

结束标记

说明

Type

String

 

 

 

类型名称

Int

 

 

 

类型的引用位置

Value

Null

 

 

 

空值

Binary

 

 

 

二进制值

Boolean

 

 

 

布尔值

Class-Def

 

 

 

类定义

Date

 

 

 

日期

Double

 

 

 

双精度浮点数

Int

 

 

 

整形数

List

 

 

 

列表

Long

 

 

 

长整型数

Map

 

 

 

键值对映射

Object

 

 

 

对象

Reference

 

 

 

引用

String

 

 

 

字符串

Binary

[0x20-0x2F] <二进制数据>

0x20-0x2F

0-15

 

长度为0-15 byte的二进制数据

[0x34-0x37]<二进制数据>

0x34-0x37

0-1023

 

长度为0-1023 byte的二进制数据

‘B’ b1 b0 <二进制数据>

‘B’

(b1 << 8) + b0

 

长度小于64K的二进制数据

0x41 b1 b0 <二进制数据>

0x41

(b1 << 8) + b0

 

长度

Boolean

‘T’

‘T’

1

 

True

‘F’

‘F’

1

 

False

Class-Def

‘C’ [String]* [Int]*

‘C’

*

 

Class的定义,拆分为基本类型StringInt

Date

0x4A b7 b6 b5 b4 b3 b2 b1 b0

0x4A

 

 

1970-01-01 00:00:00 UTC开始的 毫秒数

0x4b b3 b2 b1 b0

0x4B

 

 

1970-01-01 00:00:00 UTC开始的分钟数

Double

0x5B

0x5B

 

 

0.0

0x5C

0x5C

 

 

1.0

0x5D b0

0x5D

 

 

8为的byte转换为double-128.0-127.0

0x5E b1 b0

0x5E

 

 

16位的short转换换为double

0x5F b1 b2 b1 b0

0x5F

 

 

32位的float转换为double

‘D’ b7 b6 b5 b4 b3 b2 b1 b0

 

 

 

64位的doubleIEEE浮点数格式

Int

[0x80-0xBF]

0x80-0xBF

 

 

-0x10  0x3F,计算值的方式为:

[0xC0-0xCF] b0

0xC0-0xCF

 

 

-0x800  0x7FF ,计算值的方式为:

[0xD0-0xD7] b1 b0

0xD0-0xD7

 

 

-0x4000  0x3FFFF,计算值的方式为:

'I' b3 b2 b1 b0

‘I’

 

 

计算值的方式为:(b3 << 24) +  (b2 << 16) + (b1 << 8) + b0

List

0x70-0x77 Type Value *

0x70 – 0x77

 

 

固定长度固定类型的List

0x78-0x7F value*

0x78 – 0x7F

 

 

固定长度不固定类型的List

0x58 Int Value*

0x58

 

 

固定长度不固定类型的List

0x57 Value* ‘Z’

0x57

 

‘Z’

不固定长度不固定类型的List

‘V’ Type Int Value*

‘V’

 

 

固定长度固定类型的List

0x55 Type Value  * ‘Z’

0x55

 

‘Z’

不固定长度固定类型的List

Long

[0xD8-0xEF]

0xD8-0xEF

 

 

-0x08  0x0F

[0xF0-0xFF] b0

0xF0-0xFF

 

 

-0x800 — 0x7FF

[0x38-0x3F] b1 b0

0x38-0x3F

 

 

-0x40000 — 0x3FFFF

0x59 b3 b2 b1 b0

0x59

 

 

32位的Int转换为Long

'L' b7 b6 b5 b4 b3 b2 b1 b0

 

 

 

64位的Long

Map

'M' type (Value Value)* 'Z'

‘M’

 

‘Z’

Key类型固定的Map

'H' (Value Value)* 'Z'

‘H’

 

‘Z’

Key类型不固定的Map

Null

‘N’

‘N’

 

 

空值

Object

[0x60-0x6F] Value *

0x60-0x6F

 

 

Java对象

‘O’ Int Value *

‘O’

 

 

Java对象

Reference

0x51 Int

0x51

 

 

Map/List/Object中引用的其他对象在序列化数据中的位置

String

[0x00-0x1F]<UTF8编码格式字符串>

0x00-0x1F

 

 

 31位长度的字符串

[0x30-0x34] b0 <UTF8编码格式字符串>

0x30-0x34

([0x30-0x34]-0x30) * 256 + b0

 

1023长度的字符串

0x52 b1 b0 <UTF8编码格式的字符串> String

0x52

 

 

字符串片段,大于64k的字符串拆分为小于64k的字符串片段

‘S’ b1 b0 <UTF8编码格式的字符串>

‘S’

 

 

 65536大小的字符串


0 0
原创粉丝点击