Size: a a a

Rust — русскоговорящее сообществo

2020 October 22

Э

Эрик in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Может, есть какой-то крейт для IPC?
Я хочу:
1. В одном процессе поднять «сервер»
2. Сервер должен отдать некую строку
3. По этой некой строке к нему должен мочь подключиться (на том же компьютере) клиент
4. По такому коннекту я хочу гонять туда-сюда обычные растовые структуры (можно имплементировать (De)Serialize)
Если ты отдаёшь в раст, то можно с потенциальным UB просто указатели слать.
источник

Э

Эрик in Rust — русскоговорящее сообществo
А если не с растом, то ты не отдашь растовые структуры.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Указатели? В другой процесс?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
И, главное, я хочу тупо абстрагироваться от того, как технически происходит пересылка. Я понял, что мне влом имплементировать свой mspc::channel для IPC, я хочу готовый.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Указатели? В другой процесс?
Ну да, если оно в куче лежит и другой процесс сбилжен тем же компилятором, то норм.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Эрик
Ну да, если оно в куче лежит и другой процесс сбилжен тем же компилятором, то норм.
Ядро не даст же доступа к памяти другого процесса
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
И всё равно нужно как-то передать указатель, на чём мы возвращаемся к пункту один
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну просто возьми JSON и кидай по Tcp.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Там десять строчек написать цикл для Tcp и ещё столько же для парсинга JSON.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Какие-такие десять строк нужны на serde_json::from_slice? :)
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Эрик
Ну просто возьми JSON и кидай по Tcp.
Чтобы кидать по TCP мне нужно:
1. Разобраться с оунершипом сокета (видимо, сплитать его на два и делать половину шатдауна на каждый?)
2. Понять, как обрабатывать IO-ошибки (например, написать логику для ретрая на ErrorKind::Interrupted)
3. Написать нормальную логику итерации по сообщениям из канала
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Mikail Bagishov
Какие-такие десять строк нужны на serde_json::from_slice? :)
Откуда взять слайс?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Откуда ты узнаешь, когда заканчивать читать из сокета?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Чтобы кидать по TCP мне нужно:
1. Разобраться с оунершипом сокета (видимо, сплитать его на два и делать половину шатдауна на каждый?)
2. Понять, как обрабатывать IO-ошибки (например, написать логику для ретрая на ErrorKind::Interrupted)
3. Написать нормальную логику итерации по сообщениям из канала
Рейтрай просто через read_all/write_all
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Откуда взять слайс?
Из read_line()
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Одно сообщение - одна строка
источник

Э

Эрик in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Откуда ты узнаешь, когда заканчивать читать из сокета?
Ну если терминального сообщения нет, то просто по любой ошибке кроме Interrupted/Wouldblock.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Кроме того, парсинг JSON медленный, а конкретно здесь мне хотелось бы поэкономить доли секунды. Можно было бы использовать bincode, но с ним прикол с .read_line() не пройдёт
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
И да, read_line все эти WouldBlock сам обработает
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Кроме того, парсинг JSON медленный, а конкретно здесь мне хотелось бы поэкономить доли секунды. Можно было бы использовать bincode, но с ним прикол с .read_line() не пройдёт
Если доверие есть, то сначала пишешь длину сообщения потом само сообщение. Если доверия нет, то какое-нибудь простенькое экранирование нужно
источник