Есть ли хорошая сетевая библиотека Java?

В настоящее время я ищу сетевую библиотеку Java. Я хочу отправить XML, JSON или другие сериализованные сообщения от клиента другому клиенту и/или клиенту на сервер.

Моя первая попытка состояла в том, чтобы создать POJO для каждого сообщения плюс MessageWriter для отправки и MessageReader для его получения. Plus и обработка ошибок. Это довольно много ошибок.

То, что я ищу, это библиотека более высокого уровня, которая абстрагируется от сокетов. Кроме того, он должен поддерживать что-то вроде генерации кода для сообщений.

Буферы протокола Google (http://code.google.com/apis/protocolbuffers/) выглядят многообещающими. Но есть ли альтернативы? Акцент делается не на скорости и безопасности (на данный момент), он просто должен работать надежно и с небольшим количеством времени реализации.

Ответ 1

А... получил. Но вместо использования кода gen. для маршалла и unmarshall, если у вас есть Java на обоих концах, можете ли вы использовать простую сериализацию объектов? Если производительность и/или размер сообщения являются проблемой, вы можете сделать свой класс сообщений внешним.

Я раньше не смотрел на Протобуфа. Выглядит довольно прилично. Используя это, вам просто понадобится метод передачи.

Ответ 2

У вас есть несколько вариантов в зависимости от того, как абстрагироваться от сырых сокетов, которые вы хотите получить. Как только вы уходите от программирования на уровне сокетов, вы в значительной степени отдаляете территорию,

  • Стандартные параметры удаленного доступа для Java: RMI или JMS
  • Реализовать JMX Mbeans на каждом клиенте и серверах и использовать удаленный JMX для вызова операций передачи сообщений.
  • Если вы считаете, что можете использовать многоадресную рассылку, я определенно проверил бы JGroups.
  • Если вы хотите создать свой собственный протокол, но хотите использовать некоторые существующие строительные блоки, посмотрите Jakarta Commons Net. HttpClient, указанный в ответе # 1, был включен в этот пакет.
  • Есть также некоторые интересные системные системы обмена сообщениями, которые обладают дополнительным достоинством поддержки нескольких платформ/языков, таких как Spread и DBus.
  • Невозможно перечислить параметры удаленного доступа без упоминания WebServices.... но.... blech!

Я не совсем уверен, что вы подразумеваете под генерацией кода для сообщений. Вы можете уточнить?

Ответ 3

Попробуйте HttpClient от apache.

Ответ 4

Если вы еще не используете Spring, это может быть больше, чем вы ищете. Но HttpInvoker - довольно абстракция высокого уровня для отправки messagess. Все удаленная информация доступна в Интернете, а раздел HTTP Invoker находится в 17.4.

Ответ 5

Если вам нравятся возможности, вы также можете посмотреть JBossCache. Он реализуется с использованием JGroups, и, хотя ваше требование не для решения кэширования, оно довольно хорошо абстрагирует некоторые из основных функций JGroups, в основном реализуя распределенную хэш-карту с уведомлениями о событиях и т.д.

Ответ 6

IDL (варианты языков описания интерфейса) основанный на языке нейтральный (вид) сетевой библиотеки/рамки:

  • Thrift - лицензия Apache.
  • Ice - GPL и коммерческие лицензии.
  • CORBA - Если вам нужно больше вариантов.

Ответ 7

Я предлагаю вам взглянуть на ActiveMQ для передачи сообщений. Это просто, гибко и быстро. Он поддерживает объекты Serializable, а также сообщения Map и другие типы сообщений JMS, поэтому вам не нужен ваш собственный формат Serialization, если эффективность не важна. Если производительность важна, я бы предложил Hessian, это очень быстро, не требуя генерации кода.