是否可以让两个独立的JVM在没有RMI或Socket的情况下相互通信?
我的情况如下:
我在一个控制台中的命令行界面中有一个服务器(java app)。我可以使用SSH登录计算机,所以我有另一个终端。我现在想要启动一个小程序,它可以与服务器通信。这是为了控制服务器,所以没有很多流量(只是传来一些小字符串)。
我不想使用Socket或RMI,因为它使用另一个端口号。
PipedWriter是一个选项吗?但是现在其他JVM将如何找到它呢?
由于
答案 0 :(得分:3)
你不想要PipedWriter
;这仅适用于同一进程中线程之间的通信。您也不能使用未命名的OS管道,因为这些进程之间没有关系。你可能使用操作系统fifo(假设你在Unix上,当你使用系统mkfifo
命令时;我不知道Windows的等效API是否足够好帮助那里)但我不知道Java将如何处理这样的命名管道。
最简单的机制是使用仅限于localhost,127.0.0.1上的端口的监视文件或服务器套接字。 (通过以这种方式绑定它,在没有某种本地程序的情况下从机器上访问套接字变得不可能。或者是一个适当配置的SSH隧道。)优点和< / em>监视文件方法的缺点是它需要两个进程都可以看到(并且可能写入)的某个地方。管理套接字稍微暴露一些,但更容易处理双向通信;如果这对您很重要,请考虑将Java视为支持套接字的好(如果我的口味有点低级)。
如果您正在考虑共享文件解决方案,请考虑是否将该文件设为数据库;有一个SQLite的JDBC驱动程序,它支持安全的并发访问(以及防止并发写入的问题,我打赌你从未想过)。这也可能意味着你可以避免写一个特殊的客户;有很多现有的工具。
答案 1 :(得分:1)
您可以尝试实施DefaultFileMonitor并让它监视文件的更改。
但是,您需要通过终端窗口向该文件发送一些数据。这需要连接到SSH套接字并回显一些命令和数据。