随笔分类 - netty
摘要:1、selector.select(timeoutMillis),调用了select方法,并默认设置1秒超时时间,同时记录轮询次数:selectCnt ++; 2、获取当前时间,计算select方法的操作时间是否真的阻塞了timeoutMillis,如果是就证明是一次正常的select(),重置se
阅读全文
摘要:我们使用curator建立连接,curator有session维护,重试机制,对递归创建节点和删除节点有较好的支持: RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); CuratorFramework client = C
阅读全文
摘要:1 reactor网络服务模型 (1) handle (2)同步事件分离器 (3)dispatcher (4)事件处理器 2 reactor的两个线程组,其中一个是负责监听客户端连接事件,另一个负责将具体的事件处理接入netty的channelHandle责任链,进行数据入站出站。 3 责任链处理,
阅读全文
摘要:压力测试条件:16core(物理8核心) + 16G 机器将性能发挥到最好。 jmetter压测TCP也是不错的; 配置如下: 连接线程和channel处理链线程分别设置成1,都用单线程的方式进行,而实际处理业务逻辑则直接使用自定义线程池,自定义线程池线程数量为:core*2=16; 5000个客户
阅读全文
摘要:收集医院设备信息时由于消息为较短的json字符串,所以我们使用netty的自定义协议进行简单的数据接收。 协议约定为:head(实际消息的字节长度)+body(实际需要解析的json数据) 解码器如下,分为两步骤,最后我们获取json字符串进行处理,如果想要使用byte[]直接解析,请忽略第二个解码
阅读全文
摘要:nio中ByteBuffer和netty中的ByteBuf相比确实后者更加的好用: (1)ByteBuf可以在用户使用数据区空间不足的情况下以2的指数倍扩容,相比ByteBuffer的char数组是final修饰的,一旦需要扩容只能人为手动干预,并且只能重新申请数组并copy才可以。 (2)Byte
阅读全文
摘要:在netty编程中我们绝大多数是要是用nio的,nio相比传统的io更加高效,而nio中核心概念离不开channel,buffer,selector三个重要的对象。 那么在netty中有一个channelPipeline的概念,表面理解起来是通道的意思,实际它是在数据传输过程中的通道容器。 之所以定
阅读全文
摘要:reactor中包含5个核心结构,那么从操作系统低层次的调度来看5部分是这样的。 (1)Handle(句柄资源描述符)本质是对客户端连接上来以后发生事件的处理机制,比如连接成功,读取数据,发送数据等状态。 (2)同步事件分离器,相对于nio来说可以理解为selector,对于客户端过来的事件需要一个
阅读全文
摘要:主要是通过AbstractByteBufAllocator类实现的ByteBuffer的申请。 代码如下: 会根据是否有Unsafe的类支持来判断是否需要使用“堆外内存”;如果配置了3种情况则不会使用 (1)io.netty.noUnsafe这个属性false (2)io.netty.tryUnsa
阅读全文