zoukankan      html  css  js  c++  java
  • java事件触发

    工作遇到一个问题:用netty实现服务和设备的交互,服务发送了一组指令,需要再等待时间内获取结果,如果结果提前全部返回,就进一步处理,如果等待时间内没有全部返回,就视为失败处理。

    这个场景我遇到的困难主要就是将netty的异步处理转为同步,

    目前我的做法是在写出到channel之后,使用CountDownLatch(1)等待响应,latch.wait(等待时长)来做同步等待,

    所有的请求有一个唯一的uuid,有一个map存储uuid和latch,nettyserver接收到消息之后,找出对应的请求的uuid,get到latch,countdown,请求的进程继续往下运行。

    netty异步,所以在接收到消息之后,我想用事件或者观察者模式,通知所有正在等待的请求,有一个响应到了,比对是否是自己等待的请求,

    写代码的时候用的是事件触发模式,相当于单观察者

    本来想改成观察者,发现不合适模式,其他的消息应该其他处理,不能new成其他的观察者,因为nettyserver收的消息是巨大的,如果每个消息都遍历所有的观察者,消耗太大

    消息到来,分好种类,单对单的模式比较好,如果要抽象,这些不同的种类事件抽象集成会比较好

    两种模式的代码的demo后期补上git地址

  • 相关阅读:
    python 全局变量与局部变量
    Python 百分号字符串拼接
    Python集合的基本操作
    sorted by value in dict python
    gVim vundle
    vim config
    vim move the cursor in a long sentence
    步步为营-37-自动生成数据库连接字符串
    步步为营-36-ADO.Net简介
    步步为营-35-SQL语言基础
  • 原文地址:https://www.cnblogs.com/heroinss/p/9817393.html
Copyright © 2011-2022 走看看