Илья
а где я предлагал?
wex
а где я предлагал?
ты не предлагал
wex
но так пишешь, как будто это что-то незначительное
wex
я пытаюсь максимально оптимизировать размер данных, чтоб вы работало плавно и без больших задержок самое оптимальное решение - свой протокол под именно эти цели
wex
ну а с двумя соединениями проще работать, чем пытаться сериализовать данные так, чтоб их можно было отличить
Илья
расскажешь про свой протокол?
Vladislav
не желаете ли выступить с докладом на хайлоад-конфе?
wex
расскажешь про свой протокол?
нет он не подоййдет для тебя)
Илья
тогда распиши почему он лучше других
Илья
вдруг революция
wex
'\x01p\x03wex\x02\xb0\xa8\x02[+\x01\xb9\x02\x9e\t\x00' Вот так выглядит сообщение о местоположении и скорости игрока
wex
4 дроби с 3 знаками после запятой
wex
по моему вполне компактно
wex
хм можно было бы еще на байт уменьшить размер
Vladislav
да камон, если решение и правда стоящее, всем будет интересно
Илья
данные передаются на сервер?
Илья
или между клиентами?
Vladislav
твиттер же рассказывает как они айдишки в snowflake упаковывают
wex
на сервер, сервер отправляет броадкастом всем остальным
Илья
так зачем два соединения
Илья
отправил свои координаты -> получил стрим других
Илья
и наоборот
wex
так зачем два соединения
в одном соединении клиент постоянно отправляет свое местоположение, в другом получает местоположение всех остальных
Кіт ✙
чтоб были килобайты
никаких килобайт там нет GET /your-endpoint HTTP/1.1\r\n\r\n
Кіт ✙
POST /your-endpoint HTTP/1.1\r\nContent-Length: 13\r\n\r\nHello, world!
wex
тоже много
Кіт ✙
ну ладно, +30байт
ну вообще, у тебя там каша просто жесть. Два сокета - это ненормально
wex
POST /your-endpoint HTTP/1.1\r\nContent-Length: 13\r\n\r\nHello, world!
смотри, у тебя тут 13 занимает целых два байта - по одному на каждый сивол
wex
так синхронизируй это на сервере
но не только для обмена местоположением используется же вот допустим пользователь хочет что то сделать и спрашиват у сервера. может ли и по идее сервер должен вернуть ему код ответа а вместо кода ответа клиент получает сообщение о чей-то позиции
Кіт ✙
у тебя два сокета, не надо байтоёбить
о ужас, у тебя целых в два раза больше данных шлётся для установления подключения😱
Илья
сервер ответил кодом и дальше шлет данные
Vladislav
чел не осилил мультиплексирование сообщений и теперь бьёт себя пяткой в грудь про эффективность протокола
Vladislav
что тут добавить
Vladislav
@ashcarev ты питонист, наверное?
Кіт ✙
ещё раз. В чём проблема взять хттп?
тебе ж даже сервер свой писать не придется
wex
сервер ответил кодом и дальше шлет данные
ну получается на время ожидания разрешения на операцию - приостанавливаются все остальные сообщения к этому пользователю
wex
@ashcarev ты питонист, наверное?
не только я шарпер, жаваскриптер, питонист, жавист
Илья
сервер быстро отправил и всё
Кіт ✙
ну получается на время ожидания разрешения на операцию - приостанавливаются все остальные сообщения к этому пользователю
так, ладно. Мы тут скачем с бубном вокруг тебя опиши свою задачу, а мы тебе подскажем, как лучше организовать протокол
Кіт ✙
не только я шарпер, жаваскриптер, питонист, жавист
а нук что делает метод send() у генератора в питоне?
wex
ты о чем?
Кіт ✙
🤓
wex
хз, не использовал его
Vladislav
у дизельного
wex
так, ладно. Мы тут скачем с бубном вокруг тебя опиши свою задачу, а мы тебе подскажем, как лучше организовать протокол
ну мне нужно чтоб клиент мог отправлять данные и получать на них ответ и при этом получать какие-то другие даные от сервера проблема в том, что если я допустим отправлю что-то серверу и начу ждать ответ - то этот ответ может прийти не в часть, отвечающую за получение кода ответа, а часть, отвеающую за постоянным получением инфы от сервера
wex
я так и не понял почему использовать два соединения - это плохо?
Кіт ✙
ну так тебе нужно чётко обозначить сущность - сообщение
могу предложить такую структуру сообщения: - 1 байт - информация о сообщении (закдированные флаги). Например, используемое сжатие - 1 и более байт - варинт для длины тела запроса - полезная нагрузка
wex
я ж просто вызываю conn.recv( и передаю байты, которые надо заполнить
wex
и пока не будут все заполнены - оно ожидает
Кіт ✙
пиздец.
wex
клиентская чаcть на C#
Кіт ✙
я ж просто вызываю conn.recv( и передаю байты, которые надо заполнить
ладно, объясняю. TCP - это потоковый протокол, тут нет понятия "пакет" (точнее, есть, но на низшем уровне). Тут ты записал с одной стороны, и можешь прочитать с другой. Но суть в том, что на другой стороне ты далеко не факт, что прочтёшь все отправленные данные разом
Кіт ✙
то есть, ты можешь разом отправить строку. А клиент её по итогу посимвольно получит
anhckie
это про TCP? не про UDP?
anhckie
подглядываю за диалогом, интересно)
wex
то есть, ты можешь разом отправить строку. А клиент её по итогу посимвольно получит
ну я так и делаю у меня в протоколе произвольное кол-во ячеек по <256 байт данных и по одной читается размер, потом сама ячейка
wex
вот так
wex
вот так
кстати, надо чуток оптимизировать
wex
то есть ты повторил работу TCP в самом коде?
TCP следит за тем, чтоб все данные приходили целыми
wex
я просто эти данные разбил на небольшие ячейки и не для этого, а для более удобной работы с ними
Pushok
это про TCP? не про UDP?
Я знаю отличную шутку про UDP, но не факт, что она до вас дойдёт…
Илья
Я знаю отличную шутку про UDP, но не факт, что она до вас дойдёт…
я знаю отличную шутку про QUIC, но её часть вы додумаете сами
wex
давайте попробуем
кхъ ты шутку не понял)
anhckie
а, господи :D орейра теперь