我试图找到从Java进程请求信息的最简单方法。从shell脚本中,我需要传递2个字符串作为参数并返回一个字符串。完全同步和阻止。与Java进程交谈的简单方法
最简单的方法是什么? Http有点沉重,但如果没有其他的东西可以做。 Pipe/unix套接字通信很简单,但需要更多的维护代码(关于超时,附加的本地绑定库等)。自己的TCP通信可能没问题......但是很难从bash脚本中处理。
是否有任何其他简单轻量级选项不需要从脚本启动另一个JVM?
我试图找到从Java进程请求信息的最简单方法。从shell脚本中,我需要传递2个字符串作为参数并返回一个字符串。完全同步和阻止。与Java进程交谈的简单方法
最简单的方法是什么? Http有点沉重,但如果没有其他的东西可以做。 Pipe/unix套接字通信很简单,但需要更多的维护代码(关于超时,附加的本地绑定库等)。自己的TCP通信可能没问题......但是很难从bash脚本中处理。
是否有任何其他简单轻量级选项不需要从脚本启动另一个JVM?
您已经通过Linux标记了该内容。如果这只适用于Linux,那么您可以使用mkfifo创建一对命名管道,在从一个Java程序块(或者Java程序中的一个线程)中读取Java程序块时(如果需要的话),然后通过写入来发送命令对它; Java程序可以在另一个上发送回复。
您可以使用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来处理一些麻烦。
我肯定会使用http。如果您已经在应用程序服务器上运行,那很容易。如果没有,你可以在这里找到答案:
http://blogs.operationaldynamics.com/andrew/software/free-java/sun-secret-webserver.html
对于简单的通信,只需使用文件和dirwatcher - 跛脚而有效。对于HTTP服务器,我会坚持使用HTTP,否则您总是可以尝试JMX或编写您自己的套接字连接。
这很酷 - Linux提示和它可以让您编写Java程序的便携且简单的事实。 – 2011-03-23 14:19:07