wex
в мапе
погоди
а обьекты внутри мапа нельзя менять(
Илья
почему?
wex
ошибка
Vladislav
wex
cannot assign to struct field users[string(args[1])].write in map
Илья
ошибка
u := users[...]
u.write
Илья
но тогда храни указатель
Кіт ✙
Юра (Юрий Александрович)
Да не перепутаются внутри одного коннекшена ваши сообщения. Даже если из двух мест писать в одно TCP-соединение, сам драйвер TCP проследит за тем, чтобы отправленное пришло в том же порядке. Причем проблемы с доставкой в одном направлении не влияют на отправку в другом направлении.
wex
Юра (Юрий Александрович)
И если отправитель данных на своем прикладном уровне что-то там подтупляет, сервисные фреймы TCP с квитирующим списком пакетов все равно будут идти, лишь бы не зависал сам комп.
Илья
wex
: )
Юра (Юрий Александрович)
Тут надо сделать над собой волевое усилие
Юра (Юрий Александрович)
у вас два соединения, чтобы в каждой порции данных съкономить один байт на код типа сообщения?
Юра (Юрий Александрович)
Который вы просто не передаете, т.к. тип сообщения вы определяете по тому, на какой коннект оно пришло?
Илья
ну опять таки сервер может сам управлять запросами
wex
ну смотрите
есть отдельный поток, который в бесконечном цикле прослушывает соединение, пытается из него достать один байт
Этот один байт - означат длинну сообщения
После получения этого байта - запрашивается сообщение указанной длинны и так, пока не будт получен нулево байт
потом весь этот набор сообщений обрабатывается и все идет по новой
Если я в другом потоке отправлю данные на сервер и сразу после отправки выполню conn.recv в ожидании получить от сервера один байт - этот байт получит не поток, который ждет ответ от сервера, а поток, который ждет от сервера сообщения(призывы к действию)
Юра (Юрий Александрович)
нулевой байт - это что?
wex
wex
означате конец сообщений
Кіт ✙
\x00
а зачем, если у тебя и так длина сообщения известна?
Юра (Юрий Александрович)
А зачем вам нулевой байт, если длина сообщения уже записана и так?
Юра (Юрий Александрович)
А зачем я второй вопрос такой же написал?..🤔
Vladislav
Vladislav
всё, уже не нужна?
Кіт ✙
wex
хах
wex
да не особо, вроде
Кіт ✙
это не хах, это не шутки
Кіт ✙
у тебя реально каша просто жесть
wex
а как предлагаешь? вот мне нужно при запуске клиента сообщить серверу, что вот привет, у меня такое то имя
сервер должен всем текущим клиентам сообщить, что вот такой то добавился
и должен сказать этому чуваку, мол, окей, ты проходишь
Кіт ✙
wex
слишком много воды у него
Илья
wex
Юра (Юрий Александрович)
Аналазитор типов пакетов по коду пакета смотрит, кому его послать дальше.
Дальше у вас есть несколько разных обработчиков типов пакетов.
Vladislav
вроде bson по сути так же кодируется
wex
wex
ну у меня неограниченое кол-во таких вот слов в предложении
Юра (Юрий Александрович)
(писк цензуры)
int - длина пакета.
Юра (Юрий Александрович)
что такое "предложение" в данном случае?
Vladislav
https://developers.google.com/protocol-buffers/docs/encoding#varints
Кіт ✙
Vladislav
как эффективно кодировать инты переменной длины
wex
Vladislav
только ещё больше протобаф получается
Юра (Юрий Александрович)
Vladislav
настолько, что уже пора бы и правда взять протобаф
wex
а щас я могу любое кол-во 256-байтных слов отправить
Юра (Юрий Александрович)
набор строк "длинна:сообщение"
все, что готовится целиком, отправляется целиком и обрабатывается целиком - это пакет. А дальше в нем какую хотите структуру предусматривайте, хоть дерево из слов.
Юра (Юрий Александрович)
Кіт ✙
Юра (Юрий Александрович)
ну вы ж там можете как-то сами выбрать между инт8, инт16, инт32 и инт64 подходящую переменную для длины пакета? Еще про какой-то varint интересный пишут.
wex
ну а как узнать, какая длинна у слова, означающее длинну пакета?)
Юра (Юрий Александрович)
А с какой стати длину пакета определяет слово?
wex
wex
набор байтов)
Юра (Юрий Александрович)
... я, конечно, понимаю, что "вначале было слово", но это не наш случай.
wex
)
Sharifzoda
Вечер добрый всем
Sharifzoda
Можете кое с чем помочь?
wex
Кіт ✙
nometa.xyz)
мужик, с твоими сетевыми технологиями, не надо
wex
wex
все работает как часы