Советы по разработке / реализации собственного протокола - PullRequest
5 голосов
/ 05 августа 2010

Где я работаю, нам нужен протокол, способный:

  • Вход / выход пользователя
  • Инструкции по отправке / получению
  • Отправка / получение файлов
  • Отправка / получение аудиопотока (можно использовать RTP)
  • Отправка / получение небольших файлов XML Используйте
  • криптографию для всех.

Этобыть реализован в Java.Поэтому у меня есть несколько вопросов, поскольку я еще никогда не реализовывал сетевой протокол.

  1. Можно ли использовать существующие протоколы для его создания?
  2. Какой инструмент я могу использовать дляпомогите мне разработать протокол?для "Моделирования"
  3. Можно ли все это выполнить, делая это в одиночку?У меня есть столько времени, сколько мне нужно для этого.

У меня довольно хороший опыт работы с Java и C ++, но пока с сокетами / сетевым программированием.

Спасибо

Ответы [ 5 ]

3 голосов
/ 05 августа 2010

Посмотрите Буферы протокола Google , которые будут генерировать компактный проводной протокол, а также автоматически генерировать классы сообщений Java. Хотелось бы услышать об этом до того, как развернуть свой собственный кодек сообщений с использованием Java NIO ByteBuffer s.

2 голосов
/ 05 августа 2010

У меня есть ощущение, что вы пытаетесь заново изобрести либо SIP (если ваша обработка пакетов в основном не имеет состояния и XML достаточно мал, чтобы вмещать <3k пакетов), либо XMPP. </p>

Если вам нужноориентированный на соединение вход / выход из системы и команды / инструкции с сохранением состояния, тогда XMPP, вероятно, ближе к требованиям.Кроме того, расширение Jingle для XMPP уже имеет дело с настройкой и удалением RTP.XML-сообщения тривиальны для встраивания в пользовательские пакеты XMPP (которые сами по себе являются XML), и существуют известные решения XMPP для прокси передачи файлов.

Я почти уверен, что он вполне соответствует вашим требованиям (по крайней мере, такони представлены здесь).Если вам не нужно разрабатывать совершенно новый протокол, возможно, вам будет проще.Также повторное использование существующего сервера XMPP позволит вам решить проблему создания собственного брокера сообщений.Есть сервер OpenFire, который написан на Java.

1 голос
/ 26 сентября 2013

Я не знаю, плохой это совет или нет, но я обычно делаю для своих сетевых приложений создание объекта Message, содержащего строку TAG и строку CONTENT.Часть CONTENT обычно представляет собой строку JSON, а само сообщение также отправляется на сервер или с него в виде строки json.

Когда сервер или клиент получает сообщение, он анализирует json в объект Message.Затем вы можете проверить часть сообщения TAG, чтобы увидеть, какой тип содержимого содержится в части сообщения CONTENT, и решить, что с ним делать.

Например, если TAG == "LOGIN", тоСОДЕРЖАНИЕ может быть данными для входа в систему или аналогичными.И когда TAG == "MESSAGE", тогда CONTENT, возможно, будет строкой json, представляющей ваши параметры, например, кто является получателем / получателями и каково содержание сообщения и т. Д.Затем вы делаете шифрование и дешифрование строк.Если это глупый способ сделать это, пожалуйста, сообщите мне об этом в комментарии, чтобы я мог узнать:)

Я также обычно реализую шаблон проектирования состояний с обеих сторон, но, по крайней мере, на стороне сервера.Например, сервер запускается в состоянии WaitingForLogin.Когда клиент входит в систему, он переключается в другое состояние, которое, например, слушает только файлы и сообщения чата.Таким образом, я обнаружил, что управлять им немного легче.

0 голосов
/ 06 августа 2010

Написание протокола с нуля может потребовать много работы.Посмотрите на XMPP.

Если вы хотите написать собственный протокол, начните с изучения формы RPC, такой как JSON или аналогичной, которая сделает вашу жизнь намного проще.

0 голосов
/ 05 августа 2010

Вы можете использовать http или https. Медиа-фреймворк Java содержит реализацию rtp.

...