• Как разобрать HTTP запрос?

    bingo347
    @bingo347
    Crazy on performance...
    Что делать если размер запроса больше чем размер буфера?
    Читать в цикле. read вообще не гарантирует, что заполнит буфер полностью, но больше его размера он точно за раз не прочитает. А еще он возвращает io::Result<usize>, в котором сообщает, сколько реально байт было прочитано.
    1.1) Нужно будет читать пока не найдется CRLF в буфере ?
    Пока read не вернет Ok(0), ну или ошибку. Хотя с ошибкой не все так однозначно, согласно доке может вылететь Err(io::ErrorKind::Interrupted) при котором стоит повторить попытку чтения. Вообще CRLF будет после каждого заголовка, а когда заголовки закончатся будет 2 CRLF подряд, а потом еще может быть тело запроса, а может и не быть.
    1.2) для этого мне нужно пройтись по буферу и искать CRLF . если его нет то очистить буфер и продолжать читать ?
    нет, нужно распарсить то что пришло, куда-то сохранить, а потом продолжить чтение.
    2) Как отделять один http запрос от другого ?
    Если у нас не keep-alive, то каждый запрос будет в отдельном соединении, но keep-alive наступает только если обе стороны прислали заголовок Connection: keep-alive Можете сделать по простому, и отвечать с заголовком Connection: close, все равно в учебном проекте производительность у Вас будет никакая. Но если хотите все же заморочиться, то правило тоже не сложное - следующий запрос начинается в следующем же байте, где закончился текущий. Размер тела запроса в байтах можно узнать из заголовка Content-Length, а если его нет, то можете считать, что его значение 0.

    Что следует почитать для Вашей задумки:
    1. Спеку http
    2. Исходники hyper
    3. Исходники actix-web
    Ответ написан
    Комментировать
  • Выделяется ли память при передачи slice?

    ozkriff
    @ozkriff
    Rust э̶н̶т̶у̶з̶и̶а̶с̶т сектант, хобби игродел
    Как я понял срез это просто ссылки на элементы массива, а значит не будет выделяться память ?

    Если вынести за скобки "boxed slice" (Box<[u8]>, см. https://doc.rust-lang.org/reference/types/slice.html ), то обычные срезы (`&[u8]` и `&mut [u8]`) никакой дополнительной памяти не выделяют - только указатель на первый элемент + usize для хранения количества элементов.

    Равноценен ли массив с ссылками на элементы другого массива - срезу ?

    `[&u8]`? Нет - как минимум потому, что потребует места под хранение указателя на каждый элемент.

    Допустим у меня массив байтов и мне нужно его превратить в строку.

    https://doc.rust-lang.org/std/str/fn.from_utf8.html
    Ответ написан
    Комментировать
  • Что такое вес в нейронных сетях?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Называйте как хотите, вес - насколько сильно оказывает влияние конкретные входной сигнал на выходной.
    Ответ написан
    2 комментария