单例网络事件处理器可以吗?

时间:2010-03-11 18:44:58

标签: events network-programming singleton

假设您在网络的另一端有一个系统,它发送需要缓存到某个中间代理的事件和数据。

我决定性能和简单性(处理代理订阅的第三方库不是很漂亮)而不是让应用程序的每个组件都需要被告知此类事件的新订阅,我应该只有一个事件订阅代理程序时,处理程序订阅代理程序并以编程方式触发事件,因为它将接收它们发送给订阅的侦听程序。缓存的数据也可以从这个单例共享。这将大大减少网络连接。

然而,根据大多数关于单身人士的讨论,除非出于并发原因或硬件原因,您只需要一个接入点,否则它们总是处于恶劣状态。这不是我的情况,因为每个组件都可以拥有自己的订阅和他们自己的个人数据缓存,因为可以通过代理请求所有数据。但是,这可以轻松添加200个网络连接。

因为单身人士是邪恶的,这意味着与拥有200份数据的经纪人的200多个连接比使用我不需要使用的单身人士更好?毕竟这会让事情变得缓慢,但不会破坏游戏,应用程序仍然可用。

1 个答案:

答案 0 :(得分:1)

为您的流程中的多个客户提供服务的代理客户端对象没有任何内在错误。

所有关于单身人士都是邪恶的谈论实际上是关于全球变量是邪恶的。单身人变得邪恶,因为它为可变状态提供static访问点,而不是因为它只有一个实例。

有鉴于此,您可能希望使用依赖注入来挂接它而不是调用Broker.getInstance()。这避免了客户端代码假设它实际上是单例。