У меня есть приложение Java, соединяющееся через сокет TCP с "сервером", разработанным в C/C++.
оба приложения и сервер работают на той же машине, поле Solaris (но мы рассматриваем миграцию на Linux в конечном счете). тип переданных данных является простыми сообщениями (вход в систему, вход в систему ACK, затем клиент просит что-то, ответы сервера). каждое сообщение приблизительно 300 байтов длиной.
В настоящее время мы используем Сокеты, и все в порядке, однако я ищу более быстрый способ обмениваться данными (более низкая задержка), с помощью методов IPC.
Я исследовал сеть и придумал ссылки на следующие технологии:
но я не мог найти надлежащий анализ их соответствующих действий, ни один, как реализовать их и в JAVA и в C/C++ (так, чтобы они могли говорить друг с другом), кроме, возможно, каналов, которые я мог вообразить, как сделать.
кто-либо может прокомментировать о действиях и выполнимости каждого метода в этом контексте? какой-либо указатель / связывается с полезной информацией о реализации?
ОТРЕДАКТИРУЙТЕ / ОБНОВЛЕНИЕ
после комментария и ответов я добрался здесь, я нашел информацию о Сокетах Домена Unix, которые, кажется, создаются только по каналам и сохранили бы меня целый стек TCP. это - конкретная платформа, таким образом, я планирую тестирование его с JNI или или глухие заходки или junixsocket.
затем возможные шаги были бы прямой реализацией каналов, затем общая память, хотя меня предупредили относительно дополнительного уровня сложности...
спасибо за помощь
В моей прежней компании мы работали с этим проектом, http://remotea.sourceforge.net/ , очень легко понять и интегрировать.
Если вы когда-нибудь подумаете об использовании собственного доступа (поскольку и ваше приложение, и «сервер» находятся на одной машине), подумайте о JNA , там меньше шаблонного кода, с которым вам придется иметь дело.
Вот проект, содержащий тесты производительности для различные транспорты IPC:
DMA - это метод, с помощью которого аппаратные устройства могут получать доступ к физической памяти без прерывания работы ЦП. Например. Типичный пример - контроллер жесткого диска, который может копировать байты прямо с диска в RAM. Таким образом, это не применимо к IPC.
Совместно используемая память и каналы напрямую поддерживаются современными ОС. Таким образом, они довольно быстрые. Очереди обычно являются абстракциями, например реализован поверх сокетов, каналов и / или разделяемой памяти. Это может показаться более медленным механизмом, но в качестве альтернативы вы создаете такую абстракцию.
Я не Я мало знаю о нативном межпроцессном взаимодействии, но я предполагаю, что вам нужно общаться, используя собственный код, к которому вы можете получить доступ с помощью механизмов JNI. Итак, из Java вы должны вызвать собственную функцию, которая разговаривает с другим процессом.
Рассматривали ли вы, чтобы сокеты оставались открытыми, чтобы соединения можно было использовать повторно?