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

标签 java jvm

是否可以让两个独立的 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/

相关文章:

java - .NET 到 Java 教程

linux - Linux 上的 JNI_CreateJavaVM 会破坏堆栈?

multithreading - 阻塞I/O与非阻塞I/O之间是否存在灰色区?

java - 参数对象与长参数列表的性能

jvm - JVM 如何处理 native 代码

java - Spring - 映射多个 url 模式

c# - Cisco ASA 5505 系统重新加载(重新引导/重新启动)

java - 安全证书-了解CA在代码签名中的角色

java - Final修饰符会影响Java序列化吗?

jvm - 虚拟机初始化时出错