当前位置: 首页 > wzjs >正文

建网站与建网页的区别北京网站优化服务

建网站与建网页的区别,北京网站优化服务,外贸网站展示还是商城,网站管理 官网背景 检索平台,使用长链接的方式与外部系统进行交互; 因平台使用的的自定义二进制交互协议,因此需要针对每个接口请求与响应都要进行编解码, 因此需要一种针对不同消息的分发处理 方案一 注解 反射 示例: /** * 消息类型注解 */ Retenti…
背景

检索平台,使用长链接的方式与外部系统进行交互; 因平台使用的的自定义二进制交互协议,因此需要针对每个接口请求与响应都要进行编解码, 因此需要一种针对不同消息的分发处理

方案一 注解 + 反射
示例:
/**
* 消息类型注解
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MessageHandler {//类型,平台使用符号CMD, 为了兼容不同类型,相同处理方式逻辑,这里可设置为数组String type();// 优先级int priority() default 0;
}/**
* 基础处理器
*/
public abstract class AbstractMessageHandler {// 处理消息的抽象方法public abstract void handle(Object message);
}/**
* 具体处理器示例
*/
@MessageHandler(type = "USER")
public class UserMessageHandler extends AbstractMessageHandler {@Overridepublic void handle(Object message) {// 处理用户消息}
}@MessageHandler(type = "ORDER")
public class OrderMessageHandler extends AbstractMessageHandler {@Overridepublic void handle(Object message) {// 处理订单消息}
}/*** 消息分发处理器*/
public class MessageDispatchHandler extends ChannelInboundHandlerAdapter {private final Map<String, AbstractMessageHandler> handlerMap = new HashMap<>();public MessageDispatchHandler() {// 初始化时扫描并注册所有处理器initHandlers();}private void initHandlers() {// 扫描指定包下的所有类Reflections reflections = new Reflections("com.your.package");Set<Class<?>> handlers = reflections.getTypesAnnotatedWith(MessageHandler.class);for (Class<?> handlerClass : handlers) {MessageHandler annotation = handlerClass.getAnnotation(MessageHandler.class);try {AbstractMessageHandler handler = (AbstractMessageHandler) handlerClass.newInstance();handlerMap.put(annotation.type(), handler);} catch (Exception e) {// 异常处理}}}@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) {// 获取消息类型String type = getMessageType(msg);AbstractMessageHandler handler = handlerMap.get(type);if (handler != null) {handler.handle(msg);} else {// 处理未知类型消息ctx.fireChannelRead(msg);}}
}/**
* 异常处理
*/
public class MessageDispatchHandler extends ChannelInboundHandlerAdapter {@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {// 统一的异常处理if (cause instanceof MessageHandleException) {// 处理特定异常} else {// 处理其他异常}}
}/**
* 处理器生命周期管理
*/
public abstract class AbstractMessageHandler {public void init() {// 初始化逻辑}public void destroy() {// 销毁逻辑}public abstract void handle(Object message);
}

优势:

  1. 更容易实现动态的消息类型处理
  2. 可以更方便地进行统一的消息处理前后的拦截
  3. 便于实现消息处理的统计、监控等横切功能

问题:

  1. 反射可能带来性能开销
  2. 类型判断的逻辑集中在一处,可能会变得复杂
  3. 不是标准的 Netty Pipeline 模式,不能像 Netty Pipeline 那样灵活地调整处理顺序
方案二、Netty责任链
// 配置 Pipeline
public void initChannel(SocketChannel ch) {ChannelPipeline pipeline = ch.pipeline();pipeline.addLast(new StringDecoder());pipeline.addLast(new UserMessageHandler());pipeline.addLast(new OrderMessageHandler());pipeline.addLast(new SystemMessageHandler());
}// 各个 Handler 只处理自己关心的消息类型
public class UserMessageHandler extends SimpleChannelInboundHandler<UserMessage> {@Overrideprotected void channelRead0(ChannelHandlerContext ctx, UserMessage msg) {// 处理用户消息}
}public class OrderMessageHandler extends SimpleChannelInboundHandler<OrderMessage> {@Overrideprotected void channelRead0(ChannelHandlerContext ctx, OrderMessage msg) {// 处理订单消息}
}

优势:

  1. 代码结构更清晰 ,每个 Handler 职责单一,只处理特定类型的消息,处理流程清晰可见,易于理解和维护
  2. 更灵活的消息流转,可以动态决定是否继续传递消息,支持双向传递(Inbound 和 Outbound)
  3. 线程安全,Netty 的 Pipeline 实现保证了处理器的线程安全
  4. 避免了手动同步带来的复杂性
  5. 性能更优,Netty 的 Pipeline 实现经过优化

总结

从性能角度来说
  1. netty责任链模式性能更好
  2. 不需要运行时反射
  3. 类型检查更高效
  4. 内存占用更小

但是,这并不意味着反射注解就一定不好,在以下场景中,反射注解方案可能更适合:

  1. 需要非常灵活的消息处理配置
  2. 需要动态加载/卸载处理器
  3. 处理器的执行顺序需要频繁调整
  4. 业务逻辑比网络IO更重,反射带来的性能影响可以忽略

最终的选择应该基于性能要求、业务复杂度、扩展性需求、维护成本;如果没有特殊要求,建议使用原生的Netty原生的责任链模式,因为他不仅性能更好,而且与Netty的整体的设计理念更加契合

http://www.dtcms.com/wzjs/338168.html

相关文章:

  • 娱乐网站建设ppt个人如何注册网站
  • 企业3合1网站建设百度引擎入口
  • 网站中页面链接怎么做的如何创建网页链接
  • 建站哪个网站比较好百度站长平台有哪些功能
  • 泉州网站建设学徒招聘全网优化哪家好
  • 为什么做这个网站反馈问题百度账号客服人工电话
  • 建设网站有哪些好处和坏处百度关键词优化大师
  • 广州网站建设定制费用西安计算机培训机构排名前十
  • wordpress更改首页seo运营工作内容
  • 水果网站源码提高seo关键词排名
  • 海拉尔做网站广州网络推广服务商
  • 制作深圳网站建设外贸独立站建站
  • 延安网站建设灰色关键词排名方法
  • 网站建设 宁夏百度有刷排名软件
  • 哈尔滨网站优化页面谷歌官网入口
  • 做全房订制网站公司网站页面布局和样式设计
  • 自己做网站需要什么技能杭州做百度推广的公司
  • 有哪些网站可以免费做外销太原百度关键词优化
  • 企业网站建设的原则包括搜索引擎优化的方法
  • H5响应式网站示例百度搜索引擎介绍
  • 西安有那些做网站的公司苏州百度推广代理商
  • 网站关键词排名突然没了站长统计入口
  • 自己建设网站的费用网络营销推广案例
  • 自己的网站怎么申请网址
  • 用网站素材做logo连云港网站seo
  • 公司建网站多少seo优化主要做什么
  • 营销型网站类型外链怎么做
  • 济南建设局官网北京搜索关键词优化
  • 博客做单页网站自己做网站的软件
  • 代理公司注册费用seo研究院