Python Sockets - Создание формата сообщения - PullRequest
3 голосов
/ 11 января 2010

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

Мне было интересно, как лучше всего подойти к этому? Как мне построить простой протокол для их общения?

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

Ответы [ 4 ]

2 голосов
/ 11 января 2010

Во-первых, вам нужно решить, хотите ли вы, чтобы ваш протокол был удобочитаемым (намного больше накладных расходов) или двоичным. Если первое, вы, вероятно, захотите использовать регулярные выражения для декодирования сообщений. Для этого используйте модуль python re. Если последнее, модуль struct является вашим другом.

Во-вторых, если вы создаете протокол с каким-то состоянием (например, сначала мы делаем рукопожатие, затем мы передаем данные, затем мы проверяем контрольные суммы и прощаемся), вы, вероятно, захотите создать что-то вроде FSM для отслеживания состояния.

В-третьих, если разработка протокола не является знакомой темой, прочитайте некоторые простые спецификации протокола, например: IETF

Если это не учебное упражнение, возможно, вы захотите создать что-то еще, например, Python Twisted

2 голосов
/ 11 января 2010

В зависимости от требований, вы можете рассмотреть возможность использования JSON : использовать завершающие строки "newline" с кодировкой JSON. Транспортным протоколом может быть HTTP : при этом вы можете иметь доступ ко всем «связанным с соединением» средствам (например, кодам состояния) и иметь кодированную нагрузку JSON .

Преимущества использования JSON над HTTP:

  1. удобочитаемый для человека (отладка и т. Д.)
  2. библиотеки доступны для всех языков / платформ
  3. кросс-платформенный
  4. браузер отлаживаемый (до некоторой степени)

Конечно, есть много других способов облысения этого кота, но время работы прототипа с использованием этого подхода очень мало. Это стоит рассмотреть, если ваши требования (которые не очень подробно здесь) могут быть выполнены.

1 голос
/ 11 января 2010

Прочитайте некоторые протоколы и попробуйте найти тот, который выглядит так, как вам нужно. Должен ли он быть ориентированным на сообщения или ориентированным на поток? Нужно ли сохранять порядок запросов, нужно ли сочетать запросы с ответами? Вам нужны идентификаторы сообщений? Попытки, откат? Это протокол RPC, протокол очереди сообщений?

0 голосов
/ 11 января 2010

См. http://www.faqs.org/docs/artu/ch05s02.html и http://www.faqs.org/docs/artu/ch05s03.html для хорошего обзора и обсуждения форматов файлов данных и протоколов.

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