Архитектура сетевого обмена данными Java - PullRequest
0 голосов
/ 24 марта 2012

В настоящее время я занимаюсь редизайном моего старого приложения. Я не уверен, в какой форме передавать данные с клиентов на серверы и между различными серверами. Ранее был только один сервер, который обрабатывал клиентов. Обмен данными осуществлялся сериализацией и специальным «IO-решением» (раньше я не использовал такую ​​среду, как netty. Я собираюсь использовать netty сейчас.)

Мой вопрос сейчас должен ли я использовать сериализацию? У меня есть различные типы серверов (вход в систему, «менеджер кластера» (отслеживает состояние других серверов и т. Д. И назначает им задачи), серверы, которые обрабатывают клиентов и обеспечивают доступ к кластеру, и, как я, вероятно, буду называть их «серверы объектов или экземпляров» На этих последних серверах выполняются определенные сценарии, такие как «битва» или определенный мир / часть карты.

Альтернативой сериализации может быть использование настраиваемого байтового протокола и его поэтапный анализ из буфера ...

Если вам нужна дополнительная информация для хорошего ответа, пожалуйста, спросите.

Ответы [ 3 ]

4 голосов
/ 24 марта 2012

Лучшее решение зависит от деталей вашего сценария и планов на будущее.Если:

  1. Все ваши различные серверы и клиенты написаны на Java
  2. Вы управляете их разработкой
  3. Вы управляете их развертыванием так, чтобы версии можно было синхронизировать
  4. Сетевое взаимодействие не критично для производительности
  5. Факторы 1-4 останутся такими же в обозримом будущем

, тогда сериализация Java - лучшее решение, и я бы не колебалсяиспользовать это.

  • Если фактор 1 вызывает сомнение, вам определенно необходимо стандартизированное кроссплатформенное решение, такое как JSON, XML, Буферы протокола , Apache Thrift или ASN.1 .

  • Если фактор 2 вызывает сомнения, вам нужно популярное стандартизированное кроссплатформенное решение, которое немного сужает поле, с XML и JSON наверху.

  • Если фактор 3 вызывает сомнения, вам нужен протокол, который можно расширять и управлять версиями контролируемым образом.Сериализация Java может сделать это до некоторой степени, но я сомневаюсь, что это лучшее решение.У меня не так много опыта;вам нужно посмотреть, какое решение поддерживает это лучше всего.

  • Если фактор 4 сомнителен, наилучшим решением может быть пользовательский протокол на основе байтов, но я бы также исследовал / выполнилнекоторые тесты других опций, чтобы увидеть, как они работают.

2 голосов
/ 24 марта 2012

Взгляните на Крио . Это сериализация, только намного быстрее. Вы также можете попробовать буферы протокола Google.

1 голос
/ 24 марта 2012

Тесты различных библиотек сериализации: https://github.com/eishay/jvm-serializers/wiki/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...