2011-03-23 51 views
1

我試圖找到從Java進程請求信息的最簡單方法。從shell腳本中,我需要傳遞2個字符串作爲參數並返回一個字符串。完全同步和阻止。與Java進程交談的簡單方法

最簡單的方法是什麼? Http有點沉重,但如果沒有其他的東西可以做。 Pipe/unix套接字通信很簡單,但需要更多的維護代碼(關於超時,附加的本地綁定庫等)。自己的TCP通信可能沒問題......但是很難從bash腳本中處理。

是否有任何其他簡單輕量級選項不需要從腳本啓動另一個JVM?

回答

1

您已經通過Linux標記了該內容。如果這隻適用於Linux,那麼您可以使用mkfifo創建一對命名管道,在從一個Java程序塊(或者Java程序中的一個線程)中讀取Java程序塊時(如果需要的話),然後通過寫入來發送命令對它; Java程序可以在另一個上發送回覆。

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來處理一些麻煩。

+0

這很酷 - Linux提示和它可以讓您編寫Java程序的便攜且簡單的事實。 – 2011-03-23 14:19:07

0

對於簡單的通信,只需使用文件和dirwatcher - 跛腳而有效。對於HTTP服務器,我會堅持使用HTTP,否則您總是可以嘗試JMX或編寫您自己的套接字連接。