Сообщения с Java на Erlang - PullRequest
       73

Сообщения с Java на Erlang

6 голосов
/ 09 ноября 2010

Я делаю приложение на Erlang с графическим интерфейсом на Java. Мне удалось установить связь между языками, но теперь мне нужно (я думаю) отправлять сообщение с Java на Erlang, каждый раз, когда я, например, нажимаю кнопку.

Это правильный путь?

Как бы выглядело такое сообщение?

Я нашел несколько хороших сайтов об этой форме интеграции, но мне кажется, что я не все понимаю.

http://www.trapexit.org/How_to_communicate_java_and_erlang

Ответы [ 3 ]

3 голосов
/ 09 ноября 2010

Помимо классической связи Java-Erlang через интерфейс OTP, вы можете исследовать такие методы, как:

 - 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)

2 голосов
/ 09 ноября 2010

Если 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);

Для чтения пакетов из erlang и для записи используйте:

System.out.write(out_count);
System.out.write(out_buf, 0, out_count);

На erlangсторона это будет соответствовать

open_port({spawn, "<path-to-java> -cp <classpath> your-java-prog", 
          [{packet, 1}]).

Если вам нужны пакеты большего размера, используйте {packet, 2} или {packet, 4} и адаптируйте Java.Внутри пакетов вы можете запустить любой протокол с обеих сторон.

1 голос
/ 09 ноября 2010

Я работаю над приложением, похожим на ваше: C ++ GUI и сервер Erlang. Я использую сокеты TCP для обмена сообщениями между графическим интерфейсом и сервером и серверными шаблонами Erlang для обработки запросов (возможно, к серверу подключено более одного графического интерфейса одновременно).

...