связь между Java и C # - PullRequest
       39

связь между Java и C #

2 голосов
/ 12 ноября 2009

Я обнаружил, что существует набор инструментов .Net под названием GCT - Group Communication Toolkit, который является версией JGroup на C #. Я хочу знать, можно ли соединить это и JGroup вместе, чтобы клиенты Java и C # общались друг с другом. Если нет, что было бы лучшим вариантом для обеспечения связи между Java-программой и C # -программой? Еще одна опция, с которой я столкнулся, - реализация XMPP. Мне требуется очень быстрая передача сообщений между этими двумя программами, работающими на одном компьютере. Основным требованием является то, что одна из этих программ будет отправлять сообщения другой, когда инициируются некоторые конкретные события. любые идеи приветствуются.

Ответы [ 6 ]

4 голосов
/ 12 ноября 2009

XMPP не то, что вы хотите. Он предназначен для передачи сообщений между компьютерами с центральным сервером.

Я бы рекомендовал использовать сокеты для передачи данных между приложениями. См. Класс System.Net.Sockets.Socket в C # и класс java.net.Socket в Java.

3 голосов
/ 12 ноября 2009

Там, где я работаю, мы используем ICE (http://www.zeroc.com/).. Это позволяет нам маршалировать двоичные данные между Java и C #. Это неплохо.

2 голосов
/ 18 ноября 2009

Возможно использование Google Protocol Buffers. Это очень портативный и довольно быстрый.

1 голос
/ 18 ноября 2009

Если бы я делал это и нуждался в малой задержке, я мог бы рассмотреть файл с отображением в памяти или канал. Любой из них потребует некоторого программирования JNI и p / invoke.

1 голос
/ 14 ноября 2009

Ответ на "ответ" ОП ...

Способ сопоставить «продвижение сервера» с классической моделью RPC (например, реализованной в CORBA, SOAP, ICE, RMI и т. Д.) Состоит в том, чтобы изменить роль так, чтобы вещь, которую вы считаете своим сервером, заполнила Роль клиента в RPC. Узор такой:

  1. Ваш клиент звонит на ваш сервер, передавая дескриптор объекта обратного вызова.

  2. Сервер запоминает объект обратного вызова и возвращает.

  3. Клиент идет спать (или делает что-то еще ...)

Позже сервер хочет отправить некоторые данные.

  1. Сервер вызывает RPC «push» для объекта обратного вызова, передавая данные.

  2. Клиент получает вызов / запрос на объект обратного вызова, что-то делает с данными и отвечает.

0 голосов
/ 12 ноября 2009

Если важна производительность, посмотрите, что используется в научных вычислениях. Ученые сталкиваются с такими же проблемами на предприятиях, когда им необходимо соединить клиентов и серверы, и все это на еще более широком спектре языков и платформ. Может быть, этот инструмент для связывания компонентов под названием Babel будет полезен за пределами его первоначальной области? Интерфейсы описываются SIDL (как IDL в CORBA), но я не знаю, покрыт ли C # еще. https://computation.llnl.gov/casc/components/babel.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...