2009-09-28 3 views
2

Я установил базовый клиент и базовый сервер, используя java-сокеты. он может успешно отправлять строки между ними.Как создавать сообщения в модели клиент-сервер java

Теперь я хочу разработать некоторые основные сообщения. Не могли бы вы дать мне какие-либо рекомендации о том, как их выложить? Должен ли я использовать сериал Java для отправки классов? или мне нужно просто закодировать информацию, которая мне нужна в пользовательской строке и декодировать с другой стороны?

Как узнать тип сообщений? есть ли какое-то соглашение для этого? как первые 4 символа каждого сообщения, являются идентификатором сообщения?

спасибо!

ответ

4

Я бы порекомендовал вам не изобретать велосипед. Если вам подходит Java-сериализация, просто используйте его.

также принимать во внимание, что есть некоторые хорошие рамки сериализации вокруг:

thrift от Facebook, и protocol buffers от Google.

Thrift также является механизмом RPC, поэтому вы также можете использовать его вместо открытия/чтения сырых сокетов, но это, конечно же, зависит от вашего проблемного домена.

Редактировать: И ответ на ваш вопрос о форматировании сообщений. Определенно, если вы хотите реализовать свой собственный протокол, и если у вас есть несколько типов сообщений, вы должны создать заголовок да. Но я предупреждаю вас, что реализация протокола жесткая и очень подверженная ошибкам. Просто создайте объект, содержащий различные внутренние объекты + методы, которые вам нужны, если вы хотите добавить его в поле версии и сделать его реализацией интерфейса java.io.Serializable.

3

Возможно, JMS поможет вам, это трудно сказать, не зная деталей. Но JMS является стандартным, продуманным и универсальным, и есть внушительное количество доступных реализаций, с открытым исходным кодом и рекламы. Мы используем Sun OpenMQ, и мы вполне довольны этим. Он достаточно быстр для наших нужд, очень зрелый и надежный. Помните, что JMS не является легким делом по любому стандарту, поэтому вполне может быть излишним для ваших нужд.

1

Если вы собираетесь развернуть это в производственной среде, я бы посоветовал вам взглянуть на RMI или XML web services. (Google Protocol Buffers тоже интересны, но не содержат стандартного протокола для транспорта сообщений, хотя существуют 3rd party implementations).

Если вы делаете это ради удовольствия, есть много способов сделать это. В общем, сообщение в общей системе обмена сообщениями будет иметь какой-то «формат конверта», который содержит не только тело сообщения, но и метаданные о сообщении. Голый минимум для заголовка - это то, что идентифицирует предполагаемый получатель - либо целочисленный идентификатор, либо строку, представляющую имя метода, либо файл, или что-то в этом роде.

Простым примером является HTTP, формат в виде обычного текста, где конверт и составляются из всех строк до первой пустой строки. Первая строка идентифицирует версию протокола и предполагаемый приемник (≈ запрошенный файл), следующие строки являются метаданными о запросе, а тело сообщения следует за первой пустой строкой.

В общем, XML является распространенным форматом для распределенных служб (в основном из-за его хороших возможностей схемы и межплатформенной поддержки), хотя некоторые схемы используют другие форматы для простоты и/или производительности. Например, RMI использует стандартную сериализацию объектов Java.

Что вы решите использовать, в конечном итоге зависит от ваших потребностей. Если вы хотите упростить взаимодействие с вашей системой с большого количества платформ, используйте веб-службы XML (или REST). Для связи между распределенными подсистемами Java используйте RMI. Если ваша система чрезвычайно полезна для транзакций, возможно, пользовательский двоичный формат лучше всего подходит для более быстрой обработки и небольших сообщений. Но прежде чем делать эту «оптимизацию», помните, что для этого требуется лот больше работы, чтобы заставить ее работать исправно и что большинство приложения не получат от этого много пользы.

 Смежные вопросы

  • Нет связанных вопросов^_^