理论部分 一个long占8byte,大多数应用业数值不超过int每次传输多4byte会很浪费 有没有什么办法可以压缩long或int呢? 答案是有的,原理好简单,如果数值不超过int.max_value的话就"自动变成"int类型 现在问题又出现了读取时如果知道原来的类型是什么? 可以先写一个byte是什么类型,再写入值,读时先读一个byte,根据类型做不同解释 源码解读 public abstract class PacketUtil { public final static by…
理论部分 1字节等于8比特,也就是8个二进数,如下面公式 1Byte = 8bits = 0111 1111 1Short = 2Btye 1Int = 4Byte 那学这些有什么用呢? 可以用来做数据存储,如状态,操作类型 如:拿1Byte演示 操作数据 状态数据 小结:1个Byte可以存储 -127~127 个数,也就是有256个标识可以使用 我们可以用4bits做状态,4bits做操作,1Byte容量组合成两种数据 小提示:可以用计算器来计算转换,window系统在附件里能找到 有的状态是…
OpCode的全称 OpCode(Operation Code) 操作码的意思. OpCode 有几种域组成,不同领域格式组成不同 1.指令号 2.数据范围 3.数据内容 如 {code}{addr range}{data} {1}{2-5}{2至5地址内容为 "你好"} {2}{6-10}{6至10地址内容为 "hello"} 这种编码可以应用到其它领域,本项目用的格式是 {data model}{data} QOpCode 类维护所有opCode /** * @…
eventLoop从命名上看是专门处理事件 事件系统主要由线程池同队列技术组成,有以下几个优点 1.任务出队有序执行,不会出现错乱,当然前提执行线程池只有一个 2.解偶系统复杂度,这是个经典的生产者/消费者模型,生产者只需要生成执行上下文需要的数据,消费者集中实现处理逻辑,无需要关注太多关系层次问题 3.可根据业务按单一类型事件独立分配一套event system ,提高并行处理而又解决一些并行产生的并发问题 那作为一个消息框架,处理的事件有那些呢? 主要分为系统事件同用户事件 如消息编解码.s…
NioEventLoop 是jdk nio多路处理实现同修复jdk nio的bug 1.NioEventLoop继承SingleThreadEventLoop 重用单线程处理 2.NioEventLoop 是组成 pool EventLoopGroup 基本单元 总之好多边界判断跟业务经验之类的代码,非常烦碎 重要属性 public final class NioEventLoop extends SingleThreadEventLoop { //绑定 selector Selector se…
既然跟网络内容有关就不得不学习网络IO模型,时代在进步,技术也在进步,采取使用那种网络IO模型就已经确定应用程序规模 阻塞IO(blocking IO) 在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 图1 阻塞IO 大部分的IO接口都是阻塞型的.所谓阻塞型接口是指系统调用(一般是IO接口)不返回调用结果并让当前线程一直阻塞,只有当该系统调用获得结果或者超时出错时才返回. 当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的…
final class PoolSubpage<T> implements PoolSubpageMetric { //该page分配的chunk final PoolChunk<T> chunk; //内存使用记录 private final long[] bitmap; //该page是否已释放 boolean doNotDestroy; //该page在chunk中的id,通过区段计算偏移 private final int memoryMapIdx; //该page在chu…
为什么要分离? 业务需求是不停地变,如果把条件写进代码里,当用户需求变时要改代码发版本更新才能生效,这过程无疑是漫长的 就算是在开发期,不停的变开发者精力耗光在沟通,小修改上,无法专注逻辑部分 分离的根本目的是让开发者专注写引擎部分,无需关注太多业务上的边界,条件等 需要分离什么类型数值? 如活动开启时间,购买满足条件,购买上限等 这些不确定用户具体需求,全都可以弄成动态获取 分离技术实现有很多 如使用数据库mysql等 linux 常用的配置文本config 表格csv,json文件等 本项目…
eventLoop是基于事件系统机制,主要技术由线程池同队列组成,是由生产/消费者模型设计,那么先搞清楚谁是生产者,消费者内容 SingleThreadEventLoop 实现 public abstract class SingleThreadEventLoop extends SingleThreadEventExecutor implements EventLoop { private final Queue<Runnable> tailTasks; @Override protecte…
需要用到的工具  jdk : javac javap class 反编译 :JD-GUI http://jd.benow.ca/ import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class TestJdkProxy { public interface UserService { public String get…