我正在尝试找到从Java进程请求信息的最简单方法。从shell脚本我需要传递2个字符串作为参数并返回一个字符串。完全同步和阻止。
最简单的方法是什么? Http有点沉重,但如果没有别的东西可以做。管道/ unix套接字通信很简单,但需要更多维护代码(关于超时,其他本机绑定库等)。自己的tcp通信可以正常......但是很难从bash脚本处理。
是否有其他简单,轻量级的选项不需要从脚本中启动另一个JVM?
答案 0 :(得分:3)
您可以使用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。
答案 1 :(得分:1)
您已使用Linux对此进行了标记。如果这只能用于Linux,那么你可以用mkfifo创建一对命名管道,从一个读取Java程序块(或者如果需要,只读取Java程序中的一个线程),然后通过写入发送命令它; Java程序可以在另一个程序上发送回复。
答案 2 :(得分:1)
我肯定会使用http。如果您已经在应用服务器中运行,那很容易。如果没有,你可以在这里找到答案:
http://blogs.operationaldynamics.com/andrew/software/free-java/sun-secret-webserver.html
答案 3 :(得分:0)
对于简单的通信,只需使用文件和dirwatcher - 跛脚但有效。使用HTTP服务器,我会坚持使用HTTP,否则您可以随时尝试JMX或编写自己的套接字连接。