Mike
Или отправлять и помечать что за схема
А ВОТ ТЕПЕРЬ ПАБЛИК
А ВОТ ТЕПЕРЬ ПАБЛИК
вот это интересно
Mike
Типа шлешь первым символом число и потом из raw message его читаешь, отбрасываешь и потом конвертишь
Mike
Но лучше по одному коннекту одну схему гоняй
Mike
Можно схему тип, объект, а в структуру долбишь тип и кучу объектов
А ВОТ ТЕПЕРЬ ПАБЛИК
и т.п.
Mike
type Message struct {
Type string,
Person,
Car
}
Mike
Ну по эндпоинтам я и предлагаю как лучшее решение
Mike
Но он одним сокетом хочет
Nikolay
ааа там веб-сокет. ну тогда в одну структуру все варианты сгоняет а-ля Packet и потом проверяет все варианты на nil - тот что не nil тот и пришел
Nikolay
или доп поле прям указание типа как Майк привел
Mike
Я б тип слал
Mike
Чтоб не проверять, а свич
Nikolay
да я тоже тип всегда слал в таких случаях, последний раз в protobuf
Mike
Мало ли, просто хочется без тела что-то кинуть, все Нил будут
Mike
Но да, про заголовки забыл
Mike
Тоже идея хорошая
Mike
Но не для сокета)
Mike
(могу ошибаться правда, но в них же нет заголовков)
Nikolay
для вебсокета не хорошая идея, это если без него - тогда применимо, делал один раз так, но не для разных сущностей, а для разных форматов сериализации - тип сереализации передавал и принимал в заголовке http
А ВОТ ТЕПЕРЬ ПАБЛИК
Nikolay
а не будет ли это оверхедом?
будет конечно. как минимум две фигурные скобки и запятая - 3 символа, целых 6 байт в UTF-16 или 3 байта в UTF-8
Nikolay
ну пробелы мож там еще -)
Daniel
если у тебя сериализованные данные, и разные структуры - всегда парсить придется в два приема
Daniel
1. распарсили тип сообщения
Daniel
2. распарсили payload
Daniel
никаких вариантов
Daniel
и это не топорно, это так, как есть
Nikolay
выше описан вариант, где в два прохода ничего не нужно парсить
Daniel
это который?
Mike
А не пытаешься ли ты сэкономить все теоретические оверхэды в ущерб здравому смыслу или даже реальности?
Mike
а не будет ли это оверхедом?
Nikolay
в структуру Packet вложить структуры Person, Message и добавить числовое поле Type
А ВОТ ТЕПЕРЬ ПАБЛИК
Mike
А ВОТ ТЕПЕРЬ ПАБЛИК
А ВОТ ТЕПЕРЬ ПАБЛИК
А ВОТ ТЕПЕРЬ ПАБЛИК
я хочу нереального
Mike
Не
Mike
Ты отправляешь тип
Daniel
слать надо всегда специфическую структуру
Mike
И мессадж
Mike
А персон будет нил
Daniel
нил - это я, если кто не в курсе :)
Mike
Daniel
короче
Daniel
протоколы вроде json rpc 2.0 парсят в два прохода.
Daniel
самосборный протокол можно собрать и на общей структуре (пока разные по типу поля не пересекутся по именам)
Daniel
но, умоляю, не надо передавать общую структуру в обработчики
Daniel
делайте специфическую копированием, и передавайте ее
Daniel
мы тут сделали ошибку нечаяно, передавали общую
Daniel
выпиливали с матами - некоторые компайл-тайм проверки перестали работать, и это нас огорчило
Daniel
про оверхед
Nikolay
это как спор про динамическую и строгую типизацию
Daniel
вы помните, что там у вас ssl на входе?
Daniel
он ест достаточно проца, чтобы ваш оверхед не был особо заметен
Mike
Я поддерживаю не слать невнятности
А ВОТ ТЕПЕРЬ ПАБЛИК
джсон для разовых
Mike
Огребешь потом по полной
Nikolay
вот и я топлю за статику и за явность везде, с неявностью пару раз наелся выше крыши
Daniel
джсон для разовых
и еще msgpack для чего-нибудь возьмите. будет радость пидораса
Mike
Хочешь слать странный джсон, принимай нодой, ей типизируй и пробрасывай в го, лол
Nikolay
Daniel
любой один - хорош
А ВОТ ТЕПЕРЬ ПАБЛИК
там на UWS
Daniel
больше одного по одному соединению - горите в аду
Nikolay
Mike
+100500
engelbart
Ну у вас то не бесит этот json unmarshall ?
Mike
Но да, у нас формат один, схемы разные
Nikolay
msgpack очень хороший формат, очень подходит для стримов - быстрый и никаких лишних аллокаций если на стримах юзать