如何让两个 JVM 在没有 RMI 或套接字的情况下进行通信?



是否可以让两个独立的JVM在没有RMI或Socket的情况下相互通信?

我的情况如下:

我在一个控制台中的命令行界面中有一个服务器(java应用程序)。我可以用SSH登录到计算机,所以我有了另一个终端。我现在想启动一个java小程序,它可以与服务器通信。这是为了控制服务器,所以没有太多流量(只是一些小字符串在周围传递)。

我不想使用Socket或RMI,因为它使用另一个端口号。

PipedWriter是一个选项吗?但是其他JVM现在将如何找到它呢?

感谢

您不想要PipedWriter;这仅用于同一进程中的线程之间的通信。您也不能使用未命名的操作系统管道,因为进程之间没有关系。您可以使用操作系统fifo(假设您使用的是Unix,当您使用系统mkfifo命令时;我对Windows的等效API不太了解,无法提供足够的帮助),但我不知道Java在处理此类命名管道方面会有多好。

最简单的机制是使用只绑定到localhost127.0.0.1上的端口的监视文件或服务器套接字。(通过以这种方式绑定它,如果没有某种本地程序或适当配置的SSH隧道,就不可能从机器外访问套接字。)监视文件方法的优点和缺点是它需要两个进程都能看到(并可能写入)的地方。管理套接字的暴露性更强,但处理双向通信要容易得多;如果这对您很重要,请考虑一下Java对套接字的良好支持(如果对我来说有点低级的话)。

如果您正在考虑共享文件解决方案,请考虑是否将该文件作为数据库;有一个用于SQLite的JDBC驱动程序,它支持安全的并发访问(并防止并发写入的问题,我敢打赌你从未想过)。这也可能意味着你可以避免写一个特殊的客户;现有的工具非常丰富。

最新更新