是否可以让两个独立的 JVM 在没有 RMI 或 Socket 的情况下相互通信?
我的情况如下:
我在命令行界面的一个控制台中有一个服务器(java 应用程序)。我可以使用 SSH 登录到计算机,所以我有另一个终端。我现在想启动一个可以与服务器通信的小 java 程序。这是为了控制服务器,因此没有太多流量(只是一些小字符串在周围传递)。
我不想使用 Socket 或 RMI,因为它使用另一个端口号。
PipedWriter 是一个选项吗?但是现在其他 JVM 怎么会去哪里找呢?
谢谢
最佳答案
您不需要PipedWriter
;这仅适用于同一进程中线程之间的通信。您也不能使用未命名的操作系统管道,因为进程之间没有关系。您可以使用操作系统 fifo(假设您在 Unix 上,当您使用系统 mkfifo
命令实现它时;我不知道适用于 Windows 的等效 API足以帮助那里)但我不知道 Java 在处理此类命名管道方面会有多好。
最简单的机制是使用只绑定(bind)到本地主机端口 127.0.0.1 的监视文件或服务器套接字。 (通过以这种方式绑定(bind)它,不可能在没有某种本地程序或适当配置的 SSH 隧道的情况下从机器访问套接字。)优点和 watched-file 方法的缺点是它需要两个进程都可以看到(并且可能写入)的地方。管理套接字稍微暴露一些,但更容易处理双向通信;如果这对您很重要,请考虑它,因为 Java 对套接字的支持很好(如果对我来说有点低级)。
如果您正在考虑共享文件解决方案,请考虑是否将该文件作为数据库;有一个用于 SQLite 的 JDBC 驱动程序,它支持安全并发访问(并防止并发写入问题,我敢打赌你从未想过)。这也可能意味着您可以避免编写特殊的客户端;有大量现有工具。
关于java - 在没有 RMI 或套接字的情况下如何让两个 JVM 进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9593641/