2009-11-12 2 views
2

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

+0

check http://stackoverflow.com/questions/16689/java-and-c-interoperability Очевидно, что вы, должно быть, изучили базу данных, веб-службы или просто файл XMl, возможно, с помощью FileSystemWatcher? – PRR

ответ

4

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

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

3

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

+0

Я обожаю ICE. Мы использовали его на работе и вдруг легко использовать разные языки. Это похоже на то, как вы можете смешивать языки в сети точек. –

0

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

0

Возможно, я не сделал требование четким. Я ищу технологию push-сервера, а не клиентскую нагрузку. Поэтому я не уверен, будут ли выполняться вышеупомянутые решения. Мой код C# контролирует среду и обрабатывает определенные события, сгенерированные в этой среде. Когда событие генерируется, я записываю некоторую информацию. Эта информация, которую я хочу отправить на мой код Java. Итак, как вы можете видеть, код C# должен действовать как сервер, который передает данные клиенту java, когда происходит какое-то конкретное событие. Кроме того, на одном компьютере есть только один сервер и один клиент, поэтому нет проблем с масштабируемостью. Единственное беспокойство - это производительность, потому что события генерируются со скоростью 0,01 секунды. Вот почему я подумал о XMPP.

+0

Я должен добавить, что размер каждого сообщения очень маленький. Это просто строка – sura

1

В ответ на ОР в «ответ» ...

Путь к карте «сервер толчок» на классической модели RPC (например, как это реализовано с помощью CORBA, SOAP, ICE, RMI, и так далее) является переверните роль так, чтобы то, о чем вы думаете, как ваш сервер, заполняет роль клиента в RPC. Шаблон выглядит следующим образом:

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

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

  3. клиент переходит в спящий режим (или делает что-то еще ...)

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

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

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

1

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

1

Буферы протокола Google могут быть вариантом. Это очень портативно и довольно быстро.

Смежные вопросы