当前位置: 首页 > 后端技术 > Java

框架源码最佳实践摘录

时间:2023-04-01 21:38:40 Java

Vertx框架1.Holder使用Holder将关联性强的信息打包在一起,方便同步更新,比如EventLoopHolder和VerticleHolder。VertxEventLoopGroup增加了woker,但实际上包裹了一层EventLoopHolder,因为woker和woker的handlercount是密切相关的。私有静态类EventLoopHolder{intcount=1;最后的EventLoop工作者;EventLoopHolder(EventLoopworker){this.worker=worker;}2.轮询实现VertxEventLoopGroup对外提供了next方法,调用next就是不断遍历list流程,起到轮询的作用。@OverridepublicsynchronizedEventLoopnext(){if(workers.isEmpty()){thrownewIllegalStateException();}else{EventLoopworker=workers.get(pos).worker;位置++;检查位置();返回工人;}}3.面向对象继承,扩展框架功能,我使用的ServerBootstrap原型是group(EventLoopGroupparentGroup,EventLoopGroupchildGroup)。一般netty使用netty的NioEventLoopGroup作为I/O线程组,但是vertx框架没有使用NioEventLoopGroup,而是VertxEventLoopGroup,自定义了vertx需要的简单功能,增加了额外的操作publicsynchronizedvoidaddWorker(EventLoopworker),NioEventLoopGroup中没有,但是这个addWorker动态添加了woker,这是Vertx的多个Verticle实例共享监听端口的必要方式。另外,之所以可以扩展,还包含了软件的设计思想。netty的框架组的入参是Interface,它依赖于抽象而不是具体的实现。ServerBootstrapbootstrap=newServerBootstrap();//getAcceptorEventLoopGroup是一个NioEventLoopGroup,但workers是VertxEventLoopGroup,便于vertx框架扩展bootstrap.group(vertx.getAcceptorEventLoopGroup(),channelBalancer.workers());publicfinalclassVertxEventLoopGroupextendsAbstractEventExecutorGroupimplements//vertx扩展添加publicsynchronizedvoidaddWorker(EventLoopworker){EventLoopHolderholder=findHolder(worker);if(holder==null){workers.add(newEventLoopHolder(worker));}else{holder.count++;}}}