@proGO

Страница 1312 из 1674
Daniel
23.03.2018
19:50:16
ну во первых multiplexing.. мы не ждём синхронно пока получим ответ на запрос А, а посылаем запрос Б и получаем возможно даже ответ на Б ранее А это не синхронная коммуникация
зачем?! не хотим ждать - используем канал с буфером. но, вообще-то, на то и горутины, чтобы отправить запрос и подоздать ответа, ну или ошибки

Daniel
23.03.2018
19:50:52
при чем тут клиент?!

Google
Daniel
23.03.2018
19:51:01
клиент пусть как хочет работает

Kirill
23.03.2018
19:51:54
при чем тут клиент?!
"asynchronous messaging" подразумевает что есть клиент

Roman
23.03.2018
19:51:58
https://github.com/centrifugal/centrifugo
прошёлся по highlights и честно говоря мало чего понял... это для чатов чтоли?

request-reply я тут не вижу совсем, это одна из главных фич нашей либы кстати

"аутентификация" какая-то есть, но конкретно про "сессии" ничего не написано

"каналы" типа chatroom'ы и у нас можно реализовать с помощью namespace'ов

Kirill
23.03.2018
19:55:47
понял

Roman
23.03.2018
19:56:01
бинарный ли протокол - тоже не пояснено, у нас бинарный и очень компактный

Kirill
23.03.2018
19:56:46
там protobuf

Roman
23.03.2018
19:57:02
да, это скорее похоже на чаты короче

а у нас скорее похоже на HTTP2 в обе стороны с ещё кучей плюх

Google
Igor
23.03.2018
19:58:08
Daniel
23.03.2018
19:58:27
со стороны go там синхронный интерфейс?

если да - не понятно, зачем дамба, она сама получится

Roman
23.03.2018
19:59:43
со стороны go там синхронный интерфейс?
да client.Request, client.TimedRequest и client.RestoreSession блокируют до получения ответа от сервера, ошибки или таймаута, единственно client.Signal не блокирует

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

ведь их может быть неопределённое множество

и сервер неизвестно вернётся ли

Daniel
23.03.2018
20:03:16
дамба для этого не нужна

получили запрос из канала, попробовали отправить

если ошибка - поспали милисекунду, снова попробовали

Roman
23.03.2018
20:04:01
получили запрос из канала, попробовали отправить
попробовали, сервера нет, что делать?

Daniel
23.03.2018
20:04:09
и так, пока таймаут не истечет

как истек - вернули ошибку

тут, кстати, и канал не нужен, в принципе

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

Roman
23.03.2018
20:05:50
если ошибка - поспали милисекунду, снова попробовали
заспамит сервер, дамба оптимизирует данную ситуацию: спит->просыпается->пробует->спит/ура! в данном случав выполняет только 1 горутина, все остальные встают в очередь и ждут её

Daniel
23.03.2018
20:06:35
тогда эта горутина может быть одна ровно

и принимать запросы через канал

и все встанут в очередь на записи в этот канал

Google
Roman
23.03.2018
20:09:30
ладно, короче долго объяснять, у тебя нет полного контекста ситуации

но дамба тут нужна

Daniel
23.03.2018
20:09:37
нет

не нужна

Roman
23.03.2018
20:10:50
дело в том, что каждый вызов client.Request должен блокировать вызыающую рутину

Daniel
23.03.2018
20:11:48
да

это делается так

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

и встаешь на чтении этого канала

Roman
23.03.2018
20:34:57
вместе с запросом ты отправляешь канал, по которому тебе придет ответ
да, ток в таком случае для каждого запроса канал, а в случае с дамбой канал один

Daniel
23.03.2018
20:36:34
для каждого запроса два канала - для ответа и для ошибки

но разве это плохо?

Roman
23.03.2018
20:38:05
но разве это плохо?
зачем, если можно один для всех?)

Daniel
23.03.2018
20:38:40
так

а как ошибку-то вернуть ровно туда, откуда запрос пришел?

Roman
23.03.2018
20:39:37
там сейчас регистр reqid -> {fail(), fulfill()} т.е. колбаки

Daniel
23.03.2018
20:39:59
и что, это хорошо, колбеки?

лучше, чем пара каналов?

Roman
23.03.2018
20:40:14
а разве плохо?)

Daniel
23.03.2018
20:40:20
плохо

Google
Daniel
23.03.2018
20:40:22
очень

и при отладке плохо, и при чтении кода

Roman
23.03.2018
20:42:31
https://github.com/qbeon/webwire-go/blob/master/client/sendRequest.go#L16 вот тут создаётся новый request object а это собственно класс регистра: https://github.com/qbeon/webwire-go/blob/master/requestManager/requestManager.go

Daniel
23.03.2018
20:43:07
погоди

у тебя там уже есть канал для ответов

почему, собственно, не заблокироваться на его чтении?

зачем колбек?

Admin
ERROR: S client not available

Roman
23.03.2018
20:43:56
где конкретно?

Daniel
23.03.2018
20:44:36
там, где ты запрос создал и отправил

Roman
23.03.2018
20:53:07
короче sendRequest создаёт новый объект запроса, который откладывает в мап (reqid -> reqobj) requestManager'а. когда reader goroutine читающая из сокета парсит входящее сообщение и оно типа reply, тогда ищет по id данный запрос и либо фейлит его либо fulfill'ит в зависимости от овета, выполняя либо .fail() либо .fulfill() колбаки

Daniel
23.03.2018
20:54:08
это ок

Roman
23.03.2018
20:55:39
reqobj да, есть канал типа reply с либо ошибкой либо данными

Daniel
23.03.2018
20:55:51
ну

ладно, остальное завтра

Roman
23.03.2018
20:56:44
у объекта запроса есть AwaitReply

блокирующий метод

он то и читает из канала

так-что да, уже всё через каналы

дамба нужна не в этом место а в методе tryAutoconnect

Google
Roman
23.03.2018
20:58:45
ладно, реализую - покажу кому интересно

Roman
23.03.2018
21:23:26
собственно получилось https://github.com/qbeon/webwire-go
У вас подтверждения доставки есть?

И зачем поверх вебсокетов весь этот велосипед?

Roman
23.03.2018
23:23:36
У вас подтверждения доставки есть?
подтверждение доставки чего? сообщений? это гарантирует сам вебсокет запросов? они так или иначе возвращают ответ сигнал? доставка гарантируется, обработка - нет

И зачем поверх вебсокетов весь этот велосипед?
duplex messaging HTTP не обладает обратной связью, long polling - не решение, HTTP2 server-side push - не о том webwire позволяет работать с сервером через 1 единое соединение - асинхронно мультиплексить запросы и сигналы в обе стороны - бинарный протокол, очень компактный и легковесный - поддерживает по умолчанию UTF8 и UTF16 кодировки - гарантирует соединение, самовосстанавливается - сессии и аутентификация встроены.. ну и многое другое

впрочем тут всё описано: https://github.com/qbeon/webwire-go

Anatoly
24.03.2018
03:35:36
WebWire provides a compact set of useful features that are not available and/or cumbersome to implement on raw WebSockets such as Request-Reply, Sessions, Thread-safety etc.

ну эт конечно лол

впрочем, если есть время пилить всякое такое, вай нот

Mikhail
24.03.2018
06:39:44
Нужна помощь в написании отдельного Смарта под airdrop. Есть у кого опыт? Или знакомые? Заранее спасибо

Kirill
24.03.2018
08:33:01
tcp это слишком низкоуровнево

Никита
24.03.2018
08:38:38
Есть кто применяет JSON-RPC или нечто подобное?

Subbotin
24.03.2018
08:46:54
В чате на 1500 человек точно хоть один да применяет. Спрашивай вопрос

Никита
24.03.2018
08:48:05
Интересно кто с чем его применяет (http, websocket, protobuf) и было ли хорошим решение использовать RPC-style API

Daniel
24.03.2018
09:17:35
я применял поверх http и поверх udp

Никита
24.03.2018
09:18:13
И как "впечатления", если так можно сказать?

Daniel
24.03.2018
09:19:13
jsonrpc 2.0 - норм

Страница 1312 из 1674