[personal profile] gdsfh
Предупреждение: вопрос глупый. Слабонервным не читать.

Мы с коллегой проектируем протокол общения двух программ. Общение состоит в том, что одна программа пишет в stdin/пайп/сокет для другой программы сообщение, являющееся валидным json (в строгом смысле слова -- либо массив, либо объект, то есть, self-delimited), другая программа читает, обрабатывает и отсылает ответ обратно, тоже json.
Запросов и ответов может быть много в одном потоке, они идут последовательно, на каждый запрос один ответ. И есть варианты, как это всё писать в один сплошной поток байтов.

1. Писать как есть, а парсер json'а разберётся, где заканчивается массив-объект (тупым подсчётом скобочек, исключая содержимое строк, например; либо средствами json-парсера),
2. Генерировать json так, чтобы он не содержал пустых строк (последовательности байтов 0x0A 0x0A), писать его в поток и разделять разные сообщения пустой строкой,
3. Писать сначала длину сообщения в байтах в десятичном представлении, затем перевод строки, затем само сообщение, содержащее ровно указанное количество байт.
4. Взять протокол наподобие http, имеющий возможность как слать сообщения с указанной длиной, так и сообщения в чанках, так и сообщения "до закрытия канала".

(соответственно, конец общения различать в соответствующих случаях так: 1. просто закрытый на отсылку поток (eof), 2. eof либо пустая строка вместо json, 3. eof либо сообщение длиной 0, 4. закрытие канала по канонам rfc2616.)

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

За какой вариант я и за какой вариант коллега -- не скажу пока. В качестве бонуса можете попробовать это угадать, а я через пару дней расколюсь.

Profile

gdsfh

August 2013

S M T W T F S
    123
45678910
111213 14151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 19th, 2017 09:59 pm
Powered by Dreamwidth Studios