tgoop.com/nlinker_rust/1917
Last Update:
Программить блокируемые (да и неблокируемые тоже) сокеты на питоне - еще тот адок. На дворе конец 2021 года, а вам предлагаются из коробки сугубо биндинги на recv().
Кто далек от темы - recv(N) позволяет прочитать из сокета N байт, но совершенно не факт, что она прочитает именно N байт - а вдруг там сейчас столько нету? Поэтому правило дедовское - читаем не всё сразу, а recv(BUF_SIZE), причем последнюю часть естественно уменьшаем BUF_SIZE на сколько-там недочитано, а то влезем уже в следующий пакет.
В других языках естественно эти велосипеды давно изобрели, в виде всяких там этих ваших read_exact() и прочих recvall(), которые внутри у себя гоняют буферы, а вам выдают ровно столько, сколько вы запросили.
Но в питоне этого нету, а пара попыток имплементировать recvall() в коробку почему-то закончились провалом.
Зато мля в коробке есть встроенный JSON. Который, естественно, все тут же меняют на какой-нибудь rapidjson, потому что коробочным пользоваться под нагрузками нереально.
BY Linker Unsafe
Share with your friend now:
tgoop.com/nlinker_rust/1917