【问题标题】:Simple way to talk to Java process与 Java 进程对话的简单方法
【发布时间】:2011-03-23 01:46:05
【问题描述】:

我试图找到从 Java 进程请求信息的最简单方法。从 shell 脚本中,我需要传递 2 个字符串作为参数并返回一个字符串。完全同步和阻塞。

最简单的方法是什么? Http 有点重,但如果没有其他东西也可以。管道/unix 套接字通信会很简单,但需要更多的维护代码(关于超时、额外的本机绑定库等)。自己的 tcp 通信可能没问题...但很难通过 bash 脚本处理。

还有其他不需要从脚本启动另一个 JVM 的简单、轻量级选项吗?

【问题讨论】:

    标签: java linux ipc


    【解决方案1】:

    您可以使用bash's /dev/tcp 支持对 TCP 套接字进行读写:

    在一个终端中:

    $ nc -l 8888
    hello
    why hello!
    ^D
    

    在另一个终端:

    $ exec 6<>/dev/tcp/localhost/8888
    $ echo hello >&6
    $ cat <&6
    why hello!
    $ 
    

    如果您编写 Java 程序来侦听本地套接字以替换 nc -l 侦听器,则可以使用 TCP,但有点麻烦。

    【讨论】:

    • 这很酷——Linux 技巧和它让您编写的 Java 程序既可移植又简单的事实。
    【解决方案2】:

    您已使用 Linux 对此进行了标记。如果这只适用于 Linux,那么您可以使用 mkfifo 制作一对命名管道,让 Java 程序在读取一个(或者如果需要的话,只在 Java 程序中的一个线程)时阻塞,然后通过写入发送命令对它; Java 程序可以在另一个上发回回复。

    【讨论】:

      【解决方案3】:

      我肯定会使用 http。如果您已经在应用服务器中运行,这很容易。如果没有,您可能会在这里找到答案:

      http://blogs.operationaldynamics.com/andrew/software/free-java/sun-secret-webserver.html

      【讨论】:

        【解决方案4】:

        对于简单的通信,只需使用文件和 dirwatcher - 蹩脚但有效。对于 HTTP 服务器,我会坚持使用 HTTP,否则您可以随时尝试 JMX 或自己编写套接字连接。

        【讨论】:

          猜你喜欢
          • 2017-05-31
          • 2010-09-15
          • 2021-05-18
          • 2011-01-26
          • 2016-06-04
          • 2020-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多