我正在用Erlang的GUI製作一個應用程序。 我已經設法建立到語言之間的連接,但現在我需要(我猜)從Java發送消息到Erlang,每次我例如按下按鈕。Java到Erlang的消息
這是正確的路嗎?
這樣的消息將如何看?
我發現了一些關於這種形式的整合的好網站,但我覺得我沒有得到一切。
http://www.trapexit.org/How_to_communicate_java_and_erlang
我正在用Erlang的GUI製作一個應用程序。 我已經設法建立到語言之間的連接,但現在我需要(我猜)從Java發送消息到Erlang,每次我例如按下按鈕。Java到Erlang的消息
這是正確的路嗎?
這樣的消息將如何看?
我發現了一些關於這種形式的整合的好網站,但我覺得我沒有得到一切。
http://www.trapexit.org/How_to_communicate_java_and_erlang
如果jinterface太複雜,你可能只需要使用上open_port包選項,並使用
byte[] in_buf = new byte[256];
byte[] out_buf = new byte[256];
int in_count = System.in.read();
int offset = 0;
do
{
int c = System.in.read (in_buf, offset, in_count-offset);
offset += c;
}
while (offset < in_count);
來讀取數據包二郎並寫出用途:
System.out.write(out_count);
System.out.write(out_buf, 0, out_count);
在二郎側,這將匹配
open_port({spawn, "<path-to-java> -cp <classpath> your-java-prog",
[{packet, 1}]).
如果您需要更大的數據包,請使用{packet,2}或{packet,4}並調整java。 在數據包內部,您可以在雙方運行任何您喜歡的協議。
除了通過OTP jinterface經典的Java-二郎溝通你可以研究這些方法,如:
- thrift
- ice from zeroC (no official erlang binding)
- maybe two http servers on both sides (I like this approach)
- protocol buffers (rather not, it is better for larger data transfers)
你需要了解你的流量的形狀,並選擇最佳的解決方案。 Jinterface並沒有那麼糟糕,壽..(這裏是官方文檔:http://www.erlang.org/doc/apps/jinterface/jinterface_users_guide.html)
我正在處理類似於你的應用程序:C++ GUI和Erlang服務器。我使用TCP套接字在GUI和服務器之間交換消息,並使用Erlang服務器模式處理請求(我可能同時將多個GUI連接到服務器)。
+1 [Thrift](http://thrift.apache.org/)。 – 2010-11-09 14:18:04
好東西!謝謝 – Handsken 2010-11-12 08:41:55
我設法從Erlang發送消息到Java併成功接收它們。 [主要來自這個例子] [1]。 但我想要的主要事情是相反的。 從Java發送到Erlang。 我有一些猜測,我必須返回一個消息給我從Erlang得到的Pid。 [1]:http://pdincau.wordpress.com/2010/01/07/how-to-create-a-java-erlang-node-with-jinterface/ – Handsken 2011-11-03 10:47:33