Есть ли хорошая сетевая библиотека 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, это очень быстро, не требуя генерации кода.