决定使用哪种 Java 事件模式/模型



我有一个处于规划阶段的非 gui 应用程序,它将充当 RS485 网络上从属设备的控制器。 每个从设备都是可寻址的,可以做一些基本的事情,比如在简单的LCD屏幕上显示文本,接受来自键盘的文本,甚至不同类型的读卡。 这些设备具有"除非说话,否则不要说话"的通信方法,这意味着控制器正在"线路"上轮询每个设备。

因此,有一个单点通信,即RS485到以太网转换器设备的TCP插座。

我过去写过类似的东西,但这是在事件驱动的任何东西之前,也没有线程。 我们在这里谈论的是System V Unix,伙计们。 :-)

所以,我在 Java 中搞砸了线程,并在这里四处寻找做一些研究。 了解可观察类和观察器接口。 对我来说看起来不错,但是为什么我要在可寻址时通知所有观察者? 如果我使用多线程方法,我不想用不适用于它们的数据唤醒所有线程。

所以我的问题是:哪个是更好的方式? Observable/Observer 很简单,可以让我立即开始,但对于所有线程/观察者来说,必须为不适合他们的消息唤醒似乎是一种浪费,即使这是一个简单的问题使用"if"语句来测试传入的对象针对"this"。 是实现 AWT ActionListener 方法更好还是从 EventObject 开始更好? 还有什么?

我认为应用程序中接收客户端请求并决定联系哪个设备的部分不需要多线程。当然,您可以使用awt ActionListener,但是滚动自己的事件循环也很容易。

至于与设备本身的通信,如果它很慢,它可能可能发生在单独的线程(工作线程)中,这样它就不会阻塞事件循环。您通常会使用由线程池支持的执行器服务。

发回响应

将直接从工作线程发送响应数据,或者可能会返回到事件循环,从那里发送回客户端。

客户端现在可以实现为同步,空闲地等待响应,或者异步,立即返回,通常是 Future 对象,稍后可以轮询结果。

另请查看中断器模式,如果使用得当,它提供了快速的线程间消息传递,开销非常小。

相关内容

  • 没有找到相关文章

最新更新