Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
899
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
952
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
942
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1727
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4400
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Java и C# совместимость
У меня есть две программы. Один находится в C#, а другой-в Java. Эти программы, скорее всего, всегда будут работать на одной и той же машине.
Как лучше всего было бы позволить им поговорить друг с другом?
Итак, чтобы прояснить проблему:
Это личный проект (поэтому профессиональные/дорогостоящие библиотеки-это не выход). Громкость сообщений невелика, будет примерно 1-2 сообщения в секунду. Сообщения небольшие, несколько примитивных типов должны сделать трюк. Я хотел бы сохранить сложность на низком уровне. Приложение java развертывается как один jar в качестве плагина для другого приложения. Так что чем меньше внешних библиотек мне придется объединить, тем лучше. Я полностью контролирую приложение C#. Как уже было сказано ранее, оба приложения должны выполняться на одном компьютере. Прямо сейчас мое решение было бы использовать сокеты с каким-то форматом csv-like.
У Кайла есть правильный подход в вопросе о взаимодействии. Не существует ответа "correct", не зная, какие шаблоны использования, вероятно, будут.
Любое архитектурное решение-особенно на этом уровне-это компромисс.
Вы должны спросить себя:
- Какие сообщения должны передаваться между системами?
- Какие типы данных необходимо совместно использовать?
- Есть ли важное требование для поддержки сложных объектов модели или примитивы + массивы подойдут?
- каков объем этих данных?
- Как часто будут происходить эти взаимодействия?
- Какова допустимая задержка связи?
Пока у вас нет понимания ответов или потенциальных ответов на эти вопросы, будет трудно выбрать архитектуру реализации. Как только мы узнаем, какие факторы являются важными, нам будет гораздо легче выбрать наиболее подходящих кандидатов на внедрение, которые отражают требования действующей системы.
Ice from ZeroC-это действительно высокопроизводительный слой "enterprisey" interop, который поддерживает Java и .net среди других. Я думаю о нем как об обновленном Corba - он даже имеет свой собственный объектно-ориентированный язык определения интерфейса, называемый Slice (как и Corba IDL, но на самом деле вполне читаемый).
Набор функций обширен, с гораздо большим количеством предложений, чем веб-сервисы, но очевидно, что это не открытый стандарт, поэтому не стоит принимать решение легко. Сгенерированный код, который он выплевывает, тоже несколько уродлив...
Я понимаю, что вы говорите о программах на одной машине, но мне всегда нравилась идея передачи сообщений в XML вместо HTTP.
Ваш сервер может быть веб-сервером, который готов принять полезную нагрузку XML. Ваш клиент может отправить HTTP сообщений с XML в теле и получить HTTP ответа с XML в нем.
Одна из причин, по которой мне это нравится, заключается в том, что HTTP-это настолько широко используемый протокол, что его легко принять или создать HTTP POST или GET запросов на любом языке (в случае, если вы решите изменить язык клиента или сервера в будущем). HTTP и XML были здесь уже некоторое время, так что я думаю, что они здесь, чтобы остаться.
Еще одна причина, по которой мне это нравится, заключается в том, что ваш сервер может быть использован и другими клиентами, если они знают HTTP и XML.
Я использовал JNBridge ( http://www.jnbridge.com/jnbpro.htm) в относительно простом проекте, где у нас было клиентское приложение .NET, использующее относительно значительный файл jar, полный логики бизнес-объекта, который мы не хотели переносить. Это сработало довольно хорошо, но я бы не сказал, что мы полностью использовали возможности JNBridge.
Я большой поклонник бережливости an interoperability stack от Facebook. Вы сказали, что их код, вероятно, будет работать на той же машине, так что это может быть излишним, но вы все равно можете использовать его.
Похоже, что очень похожий вопрос уже задавался здесь, в Stack overflow (я искал в Google java windows shared memory):
Эффективная передача данных от Java до C++ на windows
Из ответа я бы предложил вам провести расследование:
"Вашим самым быстрым решением будет память сопоставление общего сегмента памяти, и их реализация кольцевого буфера или другой механизм передачи сообщений. В C++ это прямо вперед, и в Java у вас есть FileChannel.map метод, который делает это возможным."
Если они являются отдельными программами и работают как независимые приложения,вы можете использовать сокеты. Я знаю, что немного сложно определить протокол связи, но это будет довольно прямолинейно.
Однако, если у вас есть только две отдельные программы, но вы хотите запустить их как одно приложение, то я думаю, что IKVM-это лучший подход, предложенный марксидадом.