dubbo协议
2015-07-30 16:58
246 查看
dubbo协议说明
协议头约定
请参考dubbo开发者指南
解释
协议格式 header body data协议头是16字节的定长数据,参见上图dubbo,16*8=128,地址范围0~127
2字节magic字符串0xdabb,0-7高位,8-15低位
1字节的消息标志位。16-20序列id,21 event,22 two way,23请求或响应标识
1字节状态。当消息类型为响应时,设置响应状态。24-31位。
8字节,消息ID,long类型,32-95位。
4字节,消息长度,96-127位
源代码参考
com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodecprotected void encodeRequest(Channel channel, ChannelBuffer buffer, Request req) throws IOException { Serialization serialization = getSerialization(channel); // header. byte[] header = new byte[HEADER_LENGTH]; // set magic number. Bytes.short2bytes(MAGIC, header); // set request and serialization flag. header[2] = (byte) (FLAG_REQUEST | serialization.getContentTypeId()); if (req.isTwoWay()) header[2] |= FLAG_TWOWAY; if (req.isEvent()) header[2] |= FLAG_EVENT; // set request id. Bytes.long2bytes(req.getId(), header, 4); // encode request data. int savedWriteIndex = buffer.writerIndex(); buffer.writerIndex(savedWriteIndex + HEADER_LENGTH); ChannelBufferOutputStream bos = new ChannelBufferOutputStream(buffer); ObjectOutput out = serialization.serialize(channel.getUrl(), bos); if (req.isEvent()) { encodeEventData(channel, out, req.getData()); } else { encodeRequestData(channel, out, req.getData()); } out.flushBuffer(); bos.flush(); bos.close(); int len = bos.writtenBytes(); checkPayload(channel, len); Bytes.int2bytes(len, header, 12); // write buffer.writerIndex(savedWriteIndex); buffer.writeBytes(header); // write header. buffer.writerIndex(savedWriteIndex + HEADER_LENGTH + len); }
相关文章推荐
- 父窗口jquery触发iframe按钮事件(转载)
- html——a标签添加点击事件,火狐浏览器直接显示0
- window下cmd的宽度调整
- PHP javascript cookie
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第51讲:PHP中smarty模板技术介绍
- Python读取网页内容的方法
- 静下心来才能做学问
- IOS 播放雪花的两种方式(代码方式)
- Hibernate配置详细解释
- iOS 与 Android 生命周期对比
- iOS duplicate symbol _OBJC_CLASS 错误处理方法
- vertical-align的浅谈
- BZOJ 2124 等差子序列 线段树维护hash值
- JAVA数据结构---------绪论
- 颜色数值的表示方式
- HDOJ1238(string)
- 不能将参数 2 从“TCHAR *”转换为“const char *”
- jQuery中this与$(this)的区别
- spring中IOC是什么意思 个人觉得解释的非常有意思
- 9.1数组与字符串(一)——确定一个字符串的所有字符是否完全不同