Аргументы для протоколов без сохранения состояния (контекст: простая двухточечная связь) - PullRequest
3 голосов
/ 22 декабря 2009

(То есть этот вопрос задавался раньше , но в общем смысле, и большинство ответов были в контексте общих сетевых коммуникаций с несколькими серверами / клиентами / и т. Д.)

В контексте простого протокола двухточечной связи, каковы преимущества / недостатки протоколов с отслеживанием состояния и без сохранения состояния? Мой инстинкт заключается в том, что без сохранения состояния лучше (учитывая большую подверженность HTTP) с простые пакеты ответа команды, но я не уверен почему. Я также работаю с супервайзером, который имел большой опыт использования протоколов с отслеживанием состояния с порядковыми номерами, методов установления соединения и т. Д., И он постоянно рекомендует мне использовать протокол с отслеживанием состояния. Мы находимся в некотором тупике и не можем убедить друг друга в правильном подходе.

Другой вопрос о простых протоколах двухточечной связи привел несколько хороших примеров, а именно: HDLC (с состоянием) и MODBUS (без состояния).

1 Ответ

2 голосов
/ 01 августа 2013

Если вы посмотрите на протокол с точки зрения разговора, это может упростить его.

В протоколе без сохранения состояния нет «Hello» или «Goodbye». Каждый запрос просто «Дай мне это», «Возьми это» или тому подобное, и каждый запрос стоит сам по себе. Если клиент что-то дает серверу, ему все равно, что сервер делает с ним. Если клиенту необходимо узнать, что он только что дал серверу, он запросит его еще раз для проверки.

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

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

Вспомните, как хирург и ее помощник передают ей инструменты. Хирург говорит «scapel», и она знает, что связь была завершена, когда она получила скальпель, помещенный в ее руку. Помощник с отслеживанием состояния может отслеживать состояние связи и знать, что после «scapel» придет команда «всасывание» или «втягивающее устройство», и он будет готов с соответствующим инструментом. Итак, разговор имеет состояние - начало и конец - «привет» и «до свидания». Это хорошо, потому что это уменьшает задержку и снижает накладные расходы на связь.

Вы могли бы сделать протокол Surgeon / Assistant без состояний - но повлияет ли это на качество с точки зрения общего результата?

...