Как стать автором
Обновить

Комментарии 8

Вопрос: Почему не сделать через датаграммы, концом которых будет например двойной возврат каретки. Так мы можем делить полученные данные на команды. И не надо считать сколько данных мы передаем. Мне почему-то показался такой вариант красивее.
А вообще интрересно как будет реализована многопоточность или асинхронность. Сейчас, если я правильно понимаю, сервер может принять лишь одно подключение.
Да, всё верно, сервер может работать только с одним соединением одновременно. Если мы, например, отошлём две команды, разделённые на несколько пакетов, примерно в одно и то же время, то сервер может часть их них прочитать как одну команду, а остальное как другую. Первую «некорректную» команду он попытается исполнить, что у него не получиться, а вторую, скорее всего, принять не сможет, а если сможет, то разделит на ещё большее количество команд.
насколько я понимаю мы второй раз просто не подключимся.
Мне кажется в tcp с UDP немного путаете.
Такой вариант тоже имеет право на существование. Но обычно в «сообщении» имеется заголовок, только после передачи которого передаются сами данные. Эта информация может содержать длину сообщения, контрольную сумму и другие параметры. В плане надёжности оба варианта примерно одинаковы. Если мы прочитаем пакеты не в том порядке, то вряд ли сможем это понять (если не перепутаны первый и последний пакеты в первом и втором вариантах соответственно) и будем использовать принятые данные как корректные. Для избежания подобного можно было бы передавать не только длину сообщения, но и контрольную сумму. А если мы потеряем какой-то пакет, то не сможем возобновить передачу, но это не столь критично, так как данные очень небольшие (по крайней мере пока).
tcp гарантирует очередность доставки сообщений. Это дает очень интересный эффект на IP телефонии например. Но тут на этот эффект можно смело положиться
Protocol Buffers же, зачем велосипед?
Чтобы понять, как работают с сетями в Python и вообще с сетями в программировании.
Первая часть начинается с этого предложения:
Проект был написан скорее в учебных целях (научиться сетевому программированию в Python), чем в практических.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.