[编织消息框架][设计协议]包

对象职责分离

给对象定职责,有几种好处

1.将复杂降级达到分而治之,每个对象集中实现相应功能,修改时不会影响其它对象,这叫解偶

2.职责分工明确,知道那些功能做了用不上,那些是可以不用公开使用,这叫黑箱操作

一般从使用者角度去规分对象职责

QPacket 对象是定在系统层 作用与底层通信框架交互

我们先以几个引导来加强上几节课学的知识

代码1

1 public class QPacket   {
2     /** 操作代码 **/
3     private String c;
4     /** 内容 **/
5     private Object b;
6 }

给另一台计算机发指令工作,最起码有两个基础参数 1.操作代码 2.执行内容

如果还有点印象,计算机只识别二进制,不识别明文的,所以进一步引导

代码2

1 public class QPacket   {
2  
3     /** 操作代码 **/
4     private short c;
5     /** 内容 **/
6     private byte[] b;
7 }

上节课讲的,先确认数值范围再考虑用占多少bits

操作代码,一个项目操作指令不会超过上万 而short范围之间 -32768 至 32767 如果你的指令超过范围可考虑int类型

至于内容是不确定的用byte数组代替

为什么要引导?大多数从事web开发是没有二进制转换思维

QPacket最终结构

 1 public class QPacket   {
 2  
 3     /** 序号 用于包ID,解决幂等 **/
 4     private long sn;
 5     /** sessionId **/
 6     private long sid;
 7     /** opCode **/
 8     private short c;
 9     /** 内容 **/
10     private byte[] b;
11 }

源码解读

sid是会话标识,如果每秒产生10W个会话,N天才轮回一次,用long可以防破坏

sn包标识,常用于业务上消息失丢,重复过滤处理

posted @ 2017-03-02 11:25  solq321  阅读(368)  评论(0编辑  收藏  举报