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为空的话,则将消息给业务系统处理。

  • 相关阅读:
    Visual Studio 2015 开发 ASP.NET 5
    全新的membership框架Asp.net Identity
    VS2013下实现移动端的跨平台开发
    用SQL语句,删除掉重复项只保留一条
    SOA IN Real World
    Asp.net负载均衡之Session
    C#时常需要调用C++DLL
    C# 支付宝接口
    好代码是怎么炼成的
    ASP.net 服务器监控
  • 原文地址:https://www.cnblogs.com/mysqlcluster/p/5315494.html
Copyright © 2011-2022 走看看