@gogolang

Страница 139 из 1630
Mike
22.02.2017
15:54:49
острие бритвы читал? огонь вообще

может, у тебя перевод был так себе?

Najmu
22.02.2017
15:55:09
Острие бритвы не читал

Mike
22.02.2017
15:55:54
бремя стратей у него унылое, луна и грош слогом тащит, его на английском 100% надо читать, а вот всякие вуали и бритвы — одни из лучших книг вообще

Google
Najmu
22.02.2017
15:57:02
Спасибо, почитаю на досуге.

Anton
22.02.2017
16:40:29
подскажите вот что. У меня есть массив на 1000 элементов, можно без мьютекса заполнить массив через горутины? Если чтение массива будет не скоро

Mike
22.02.2017
16:43:07
Заполняй канал и в обычной рутине вытаскивай

Не?

Eduard
22.02.2017
16:43:26
Ребят пока только погружаюсь в Golang и тут у меня есть вопрос, как мне парсить если приходит разный json Строка 47



Daniel
22.02.2017
16:45:05
пробовать сначала одно, потом другое

Eduard
22.02.2017
16:47:33
N
22.02.2017
16:49:00
так топорно?
да никто так не делает - всегда приходит что-то одно. если не ложится в концепцию делается а-ля контейнер типа Packet и туда кладется Player и Message и что-то из этого будет nil

Михаил
22.02.2017
16:49:05
Еще есть raw message

Eduard
22.02.2017
16:51:06
да никто так не делает - всегда приходит что-то одно. если не ложится в концепцию делается а-ля контейнер типа Packet и туда кладется Player и Message и что-то из этого будет nil
> да никто так не делает - всегда приходит что-то одно. Ну вот тут и вопрос как понять что пришло, первое или второе

Google
Mike
22.02.2017
16:51:54
Ну вообще не отправлять разные схемы по одному коннекту например

Или отправлять и помечать что за схема

Eduard
22.02.2017
16:52:15
вот это интересно

Mike
22.02.2017
16:52:50
Типа шлешь первым символом число и потом из raw message его читаешь, отбрасываешь и потом конвертишь

Но лучше по одному коннекту одну схему гоняй

Можно схему тип, объект, а в структуру долбишь тип и кучу объектов

Eduard
22.02.2017
16:53:54
Но лучше по одному коннекту одну схему гоняй
и если у меня 5 разных сообщений что 5 коннектов? 1 новый игрок подключился 2 ему приходит массив игроков 3 пакет в котором координаты новые

и т.п.

Mike
22.02.2017
16:54:19
type Message struct { Type string, Person, Car }

N
22.02.2017
16:54:39
Типа шлешь первым символом число и потом из raw message его читаешь, отбрасываешь и потом конвертишь
ну не, это через чур уже. в заголовки HTTP загнать свой кастомный и там написать что приезжает сейчас, потом те варианты что я предложил - впихнуть в одну структуру эти две это первый и по эндпоинтам разнести это второе а-ля http://—/message и http://---/person

Mike
22.02.2017
16:55:16
Ну по эндпоинтам я и предлагаю как лучшее решение

Но он одним сокетом хочет

N
22.02.2017
16:56:45
ааа там веб-сокет. ну тогда в одну структуру все варианты сгоняет а-ля Packet и потом проверяет все варианты на nil - тот что не nil тот и пришел

или доп поле прям указание типа как Майк привел

Mike
22.02.2017
16:57:08
Я б тип слал

Чтоб не проверять, а свич

N
22.02.2017
16:57:39
да я тоже тип всегда слал в таких случаях, последний раз в protobuf

Mike
22.02.2017
16:57:44
Мало ли, просто хочется без тела что-то кинуть, все Нил будут

Но да, про заголовки забыл

Google
Mike
22.02.2017
16:58:12
Тоже идея хорошая

Но не для сокета)

(могу ошибаться правда, но в них же нет заголовков)

N
22.02.2017
17:01:59
для вебсокета не хорошая идея, это если без него - тогда применимо, делал один раз так, но не для разных сущностей, а для разных форматов сериализации - тип сереализации передавал и принимал в заголовке http

N
22.02.2017
17:04:48
а не будет ли это оверхедом?
будет конечно. как минимум две фигурные скобки и запятая - 3 символа, целых 6 байт в UTF-16 или 3 байта в UTF-8

ну пробелы мож там еще -)

Daniel
22.02.2017
17:05:16
если у тебя сериализованные данные, и разные структуры - всегда парсить придется в два приема

1. распарсили тип сообщения

2. распарсили payload

никаких вариантов

и это не топорно, это так, как есть

N
22.02.2017
17:07:35
выше описан вариант, где в два прохода ничего не нужно парсить

Daniel
22.02.2017
17:07:45
это который?

Mike
22.02.2017
17:08:01
А не пытаешься ли ты сэкономить все теоретические оверхэды в ущерб здравому смыслу или даже реальности?

а не будет ли это оверхедом?

N
22.02.2017
17:09:42
в структуру Packet вложить структуры Person, Message и добавить числовое поле Type

Eduard
22.02.2017
17:09:43
в структуру Packet вложить структуры Person, Message и добавить числовое поле Type
но когда я буду отсылать такую структуру в джесоне я буду отправлять лишние данные инициализированные

N
22.02.2017
17:11:43
но когда я буду отсылать такую структуру в джесоне я буду отправлять лишние данные инициализированные
лишних данных не будет. лишние данные это те, которые не используются, а тут они используются для определения того, что прилетело

Google
Daniel
22.02.2017
17:12:29
в структуру Packet вложить структуры Person, Message и добавить числовое поле Type
тогда вторым этапом пойдет создание специфической структуры из общей. все равно два этапа

Eduard
22.02.2017
17:12:41
я хочу нереального

Mike
22.02.2017
17:12:54
Не

Ты отправляешь тип

Daniel
22.02.2017
17:13:00
слать надо всегда специфическую структуру

Mike
22.02.2017
17:13:02
И мессадж

А персон будет нил

Daniel
22.02.2017
17:13:27
нил - это я, если кто не в курсе :)

Eduard
22.02.2017
17:13:33
А персон будет нил
а точн, она не будет инициализированна

Mike
22.02.2017
17:13:49
Daniel
22.02.2017
17:14:17
короче

протоколы вроде json rpc 2.0 парсят в два прохода.

самосборный протокол можно собрать и на общей структуре (пока разные по типу поля не пересекутся по именам)

но, умоляю, не надо передавать общую структуру в обработчики

делайте специфическую копированием, и передавайте ее

мы тут сделали ошибку нечаяно, передавали общую

выпиливали с матами - некоторые компайл-тайм проверки перестали работать, и это нас огорчило

Google
Daniel
22.02.2017
17:17:23
про оверхед

N
22.02.2017
17:17:27
это как спор про динамическую и строгую типизацию

Daniel
22.02.2017
17:17:38
вы помните, что там у вас ssl на входе?

он ест достаточно проца, чтобы ваш оверхед не был особо заметен

Mike
22.02.2017
17:18:11
Я поддерживаю не слать невнятности

Eduard
22.02.2017
17:18:15
протоколы вроде json rpc 2.0 парсят в два прохода.
я вообще хотел комбинировать для больших данных протобаф

джсон для разовых

Mike
22.02.2017
17:18:26
Огребешь потом по полной

N
22.02.2017
17:18:53
вот и я топлю за статику и за явность везде, с неявностью пару раз наелся выше крыши

Daniel
22.02.2017
17:19:01
джсон для разовых
и еще msgpack для чего-нибудь возьмите. будет радость пидораса

Mike
22.02.2017
17:19:05
Хочешь слать странный джсон, принимай нодой, ей типизируй и пробрасывай в го, лол

N
22.02.2017
17:20:14
и еще msgpack для чего-нибудь возьмите. будет радость пидораса
чем плох формат сериализации? отличный формат

Eduard
22.02.2017
17:20:28
Хочешь слать странный джсон, принимай нодой, ей типизируй и пробрасывай в го, лол
не забрасывайте камнями, я просто хочу попробоват ьпереписать вот это https://github.com/Edisoni/uWebsocketServer

Daniel
22.02.2017
17:20:29
любой один - хорош

Eduard
22.02.2017
17:20:44
там на UWS

Daniel
22.02.2017
17:20:55
больше одного по одному соединению - горите в аду

N
22.02.2017
17:21:54
больше одного по одному соединению - горите в аду
тут такой вопрос никто не поднимал

Mike
22.02.2017
17:21:54
+100500

Ivan
22.02.2017
17:22:09
Ну у вас то не бесит этот json unmarshall ?

Mike
22.02.2017
17:22:12
Но да, у нас формат один, схемы разные

N
22.02.2017
17:22:39
msgpack очень хороший формат, очень подходит для стримов - быстрый и никаких лишних аллокаций если на стримах юзать

Страница 139 из 1630