Java 进程间通信

Posted

技术标签:

【中文标题】Java 进程间通信【英文标题】:Java Interprocess Communication 【发布时间】:2009-09-13 03:34:42 【问题描述】:

我有一种情况,我需要向正在运行的 java 应用程序发送命令,现在我正在使用 tcp/ip 套接字通过 Internet Explorer 上下文菜单项向应用程序发送命令。但是一旦应用程序启动,病毒扫描程序就会抱怨应用程序开始监听,尽管我只是在监听本地连接。我认为这可能会让用户感到困惑。我正在寻找其他不惹恼反病毒扫描仪的交流方式?

【问题讨论】:

【参考方案1】:

为此,您最好不要使用基于文件的 FIFO 队列。或者使用 Java Native Access/Java Native Interface 写入 NamedPipe 或 Shared Memory。如果你走 JNA/JNI 路线,你可以创建一个Named Event。

但是,如果不走 JNA/JNI 路线,可能无法以任何效率来做你想做的事。

【讨论】:

【参考方案2】:

您可以使用Java Management Extentions (JMX) 通过简单的Web 界面公开正在运行的进程中的方法。

【讨论】:

【参考方案3】:

套接字几乎是进行 IPC 的传统方式,但如果您真的想避免使用它们,您可能可以想出一个使用本地的解决方法文件系统。您不希望使用标准文件读取/写入,因为您很可能希望在文件系统中有效地实现队列。

如果要通过文件系统实现 IPC,我可能会使用 SQLite (which can be threadsafe when compiled so) 并为每个侦听器设置一个表。我可能会使用单列表插入消息,监听器会拉出rowid最低的行,然后删除该行。

但我的方法根本不是 Java 特定的,因此使用 Java 可能有更好的方法来做到这一点(例如 @darthcoder 的响应)。

【讨论】:

【参考方案4】:

很多人在这种情况下使用 JMS 之类的东西。

【讨论】:

一个链接或至少是首字母缩写词的扩展会很好 Java 消息服务——我认为没有人在这种情况下使用 JMS。 JMS 可能还在使用 TCP 套接字,这是他问题的根本原因。 JMS 适用于服务器端应用程序。这对客户端来说相当笨拙。

以上是关于Java 进程间通信的主要内容,如果未能解决你的问题,请参考以下文章

Java Attach API 使用啥进程间通信机制?

android 进程间通信 rabbitmq

java进程间通信

进程间通信FIFO java

JAVA线程与线程进程与进程间通信

Java NIO 进程间通信