• java事件触发


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

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

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

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

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

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

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

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

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

  • 相关阅读:
    [GCJ2017R2]Fresh Chocolate
    李耀于NOIP2010集训出的题 Dvalue
    POI ZAW
    POI SZP
    無名(noname)
    幸运序列(lucky)
    [HNOI2001]求正整数
    灰狼呼唤着同胞(brethren)
    神在夏至祭降下了神谕(oracle)
    [bzoj 4237] 稻草人
  • 原文地址:https://www.cnblogs.com/heroinss/p/9817393.html
Copyright © 2020-2023  润新知