使用类的单个实例的多个Java程序

时间:2013-01-12 21:01:02

标签: java networking wrapper single-instance

我正在编写一个虚拟网络 我有一个中央客户端类,它实现我的整个网络,并允许向/从网络中的特定其他客户端发送/接收数据。我现在不想对使用网络的所有程序使用Client类的单个实例。我有一个程序接口来处理传入的数据包,以及一个发送的包装器,所以我要感谢另一种解决方案而不是“运行本地TCP服务器”。

我现在的问题是: 如何在Java中使用它运行所有程序的类的单个实例?

1 个答案:

答案 0 :(得分:0)

这可以通过使用Java中提供的RMI,RMI-IIOP或CORBA功能轻松完成。上述技术允许在单个机器(服务器)上创建单个对象实例,并将其作为远程接口导出到其他计算机(您说您需要网络)。在其他主机中,您将拥有一个存根类,其“真实”实例具有相同的接口,并且可以在其上调用方法。这些调用将在您的服务方的单个实例上远程调用。至于意见,这正是你所要求的。

从更新,更有趣的方法来看,Google协议缓冲区看起来是一件好事,而你需要更多带有Protocol Buffers的自定义代码。 Web服务还允许导出接口,更适合通过防火墙(此处列出的其他方法更适合在您自己的服务器之间进行通信,您可以根据需要进行配置)。

如果您需要确保在给定的操作系统上只运行一个程序实例,则可以discussed in this question完成。如果你的程序正在侦听固定端口,那么第二个实例可能无法正常启动,因为端口已被占用;您只需要在尝试绑定socked并终止时捕获异常。