我試圖找到從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