Я создаю Java-приложение, которое требует связи главный-подчиненный между JVM, возможно, находящейся на одной физической машине.Будет «главный» сервер, работающий внутри сервера приложений Java EE (то есть JBoss), к которому будут подключаться «подчиненные» клиенты и динамически регистрироваться для связи (то есть мастер не будет знать IP-адреса / портыпоэтому не могут быть настроены заранее).Главный сервер выступает в роли контроллера, который будет выполнять работу с подчиненными, и подчиненные будут периодически отвечать уведомлениями, поэтому будет двусторонняя связь.
Я изначально думал о системах на основе RPC, где каждыйсторона была бы сервером, но это могло бы стать сложным, поэтому я бы предпочел механизм, где есть открытый сокет, и они общаются взад и вперед.
Я ищу механизм связи, который был бы низкимзадержка, когда сообщения будут в основном примитивными типами, поэтому никакой серьезной сериализации не требуется.Вот что я посмотрел:
- RMI
- JMS: встроенные в Java, подчиненные клиенты будут подключаться к существующей ConnectionFactory на сервере приложений.
- JAX-WS / RS: и ведущий, и ведомый будут серверами, предоставляющими интерфейс RPC для двунаправленной связи.
- JGroups / Hazelcast: используйте общие распределенные структуры данных для облегчения связи.
- Memcached / MongoDB: используйте их в качестве «очередей» для облегчения связи, хотя клиентам придется опрашивать, чтобы была некоторая задержка.
- Thrift: кажется, что сохраняется постоянное соединение, но не уверенКак интегрировать / встраивать сервер Thrift в JBoss
- WebSocket / Raw Socket: это будет работать, но потребует гораздо больше пользовательского кода, чем хотелось бы.
Есть литехнология, по которой я скучаю?
Редактировать: Также посмотрел:
- JMX: клиент подключается к JMX-серверу JBoss и получает JMX-уведомления для bidirectional comms.