zoukankan      html  css  js  c++  java
  • 使用netty实现的tcp通讯中如何实现同步返回

    在netty实现的tcp通讯中,一切都是异步操作,这提高了系统性能,但是,有时候client需要同步等待消息返回,如何实现呢?笔者已经实现,在此总结下重点要素

    实现要点:

    1、消息结构设计

         消息头中需要有id和correspondId,即消息id和响应id,使用UUID实现。message发出去的时候需设置id,服务器接收到message处理业务,响应消息中的correspondId设置成原消息的id;

    2、采用CountDownLatch实现线程同步等待;

    流程示意图:

    1、业务系统调用统一api发送消息;

    2、消息发送服务将消息缓存到消息管理器,缓存键值为id;

    3、消息发送服务将消息发送到服务器,同时线程进入休眠等待,还可以设置timeout;

    4、服务器处理消息后,将响应消息写到tcp流;

    5、消息接收服务接收到消息后,判断消息correspondId是否有值,如果有值,则说明有一个线程在等待该消息返回,根据correspondId找到该线程唤醒运行,此刻服务调用即得到返回值;

    6、correspondId为空的话,则将消息给业务系统处理。

  • 相关阅读:
    JAVA抽象方法,接口
    JAVA基础,字符串
    JAVA运算符
    JAVA数组
    团队任务1:第一次团队会议
    课后作业二:个人项目
    自我介绍
    python3加密 解密 签名 验签
    python3读取xml字符串
    SETX命令设置环境变量
  • 原文地址:https://www.cnblogs.com/mysqlcluster/p/5315494.html
Copyright © 2011-2022 走看看