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

时间:2012-03-06 23:37:15

标签: java jvm

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

我的情况如下:

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

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

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

由于

2 个答案:

答案 0 :(得分:3)

你不想要PipedWriter;这仅适用于同一进程中线程之间的通信。您也不能使用未命名的OS管道,因为这些进程之间没有关系。你可能使用操作系统fifo(假设你在Unix上,当你使用系统mkfifo命令时;我不知道Windows的等效API是否足够好帮助那里)但我不知道Java将如何处理这样的命名管道。

最简单的机制是使用仅限于localhost,127.0.0.1上的端口的监视文件或服务器套接字。 (通过以这种方式绑定它,在没有某种本地程序的情况下从机器上访问套接字变得不可能。或者是一个适当配置的SSH隧道。)优点和< / em>监视文件方法的缺点是它需要两个进程都可以看到(并且可能写入)的某个地方。管理套接字稍微暴露一些,但更容易处理双向通信;如果这对您很重要,请考虑将Java视为支持套接字的好(如果我的口味有点低级)。

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

答案 1 :(得分:1)

您可以尝试实施DefaultFileMonitor并让它监视文件的更改。

但是,您需要通过终端窗口向该文件发送一些数据。这需要连接到SSH套接字并回显一些命令和数据。