@proelixir

Страница 918 из 1045
Dmitry
26.03.2018
21:06:51
ой, прошу прощения, я ничего не читал и увидел «Тесты не компилятся»

стригеррился

помог, надеюсь

$ergi0
26.03.2018
21:07:17
компилятся
Т.е. не компилятся. Иначе зачем этот файл?

Google
Dmitry
26.03.2018
21:07:58
Без этого файла так то вообще ничего не компилится

Dmitry
26.03.2018
21:08:12
у тебя приложение без mix.exs вообще не скомпилится, в тех строчках указано для какой среды какие папки компилить

Dmitry
26.03.2018
21:08:15
Попробуй убрать “lib” )

Dmitry
26.03.2018
21:09:00
ну кстати да, получается тесты не компилятся

компилится test/support

$ergi0
26.03.2018
21:09:20
Вот :)

Dmitry
26.03.2018
21:09:25
тесты .exs, просто запускаются таском

$ergi0
26.03.2018
21:10:00
В целом наверно пофиг, не главная проблема сейчас

Alex
26.03.2018
22:01:57
У них просто определенный формат
вот в этом и проблема. вместо того чтобы делать удобные композируемые примитивы, сделали монолит. причем, сделали как попало, вставив себе же палок в колеса(вспоминая про отсутствие вебсокетов в плаге).

Dmitry
26.03.2018
22:06:20
Следующий уровень - это феникс

Я готов поспорить с тобой на 100 баксов, что ты не сможешь сделать что-то между ними. Так же как и вставить ws в плаг.

Google
Alex
26.03.2018
22:11:39
откуда берется "свой формат"? как к топику прицепить, например, SSE+HTTP POST клиент?

Dmitry
26.03.2018
22:16:00
Я не уверен, что правильно понял твой вопрос

Alex
26.03.2018
22:16:25
ну или вот: broadcast! socket, "user:entered", %{user: msg["user"]}какое отношение pubsub топик имеет к сокету канала?..

Dmitry
26.03.2018
22:16:28
Но для server side events можно сделать отдельный сокет с кастомным протоколом

Alex
26.03.2018
22:17:04
я не совсем про то, что между ws и каналами нужно что-то вставлять

я скорее о том, что в абстракцию "канал" спрятано что-то кроме ws с не очень понятными мне целями

это код 2015ого года, сорри

Dmitry
26.03.2018
22:18:45
И только

Можно канал без сокета использовать

В пабсабе

Можно и сокет без канала

Alex
26.03.2018
22:30:48
ммм. а подцепить сокет к топику на лету?

Dmitry
26.03.2018
22:32:14
Ты имеешь ввиду канал?

Или фронтенд?

Alex
26.03.2018
22:36:03
давай с начала. канал - это как amqp exchange. сокет - примерно как консюмер одной или более amqp queue подцепленным к этому эксчейнджу + автоматический паблишер сообщений от клиента + описание транспортов до клиента.

про фронтенд мы не говорим, если какую-то коммутацию нельзя сделать на сервере и только на сервере - это черт знает что.

Dmitry
26.03.2018
22:37:26
Нельзя

Вернее говоря можно, но в рамках одного канала

Google
Dmitry
26.03.2018
22:39:02
Т.е. ты должен сделать такой канал, который предусмотрит что в какой то момент клиенту нужно будет отдавать что-то новенькое

Alex
26.03.2018
22:39:25
господи

вот опять мне хочется бить себя ушами по лицу и кричать.

Dmitry
26.03.2018
22:40:11
Не вижу в этом проблемы

Если бы была меньшая абстракция - пришлось бы делать то же самое

Потому что не было бы каналов

Сокет - это генсервер, который держит соединение с клиентом. На каждую «подписку на канал» от клиента он делает новый генсервер - канал

У одного сокета может быть несколько каналов

Канал получает сообщения из двух мест - сокета и пабсаба

Для сокета - handle_in

Для пабсаба - handle_out

Alex
26.03.2018
22:43:03
У одного сокета может быть несколько каналов
но определяется это только в compile time

Dmitry
26.03.2018
22:43:21
И отправляется в сокет либо пабсаб

Через push или broadcast соответственно

Все

В 5 сообщениях - вся логика вебсокетов в фениксе

но определяется это только в compile time
Типы каналов, которые могут быть - только в compile time. Фактическое их количество - по запросу с клиента

Это просто роутер

Хочешь без него - пихай все сообщения в один канал *:*

И всю логику туда же

Google
Dmitry
26.03.2018
22:45:42
Тогда получится n2o

Или вебсокеты cowboy

А ещё, для развлечения, можно сделать 2 сокета с разным транспортом

Alex
26.03.2018
22:47:27
Dmitry
26.03.2018
22:47:44
Бизнес логику

Alex
26.03.2018
22:48:55
"канал - это как amqp exchange." вот это было неправильно

эксчейндж спрятан

Dmitry
26.03.2018
22:49:16
Я не так силён в ampq

К сожалению

Да и exchange по-моему не в протоколе, а только в rabbit mq

Alex
26.03.2018
22:50:19
на самом деле, плохая аналогия, сова не натягивается на глобус

Dmitry
26.03.2018
22:50:19
Но вот как в фениксе - я тебе рассказал

Alex
26.03.2018
22:54:09
я в очередной раз не понимаю, какими вводными и кейсами руководствовались разработчики. хорошо, ладно. именованые инстансы каналов переживающие на сколько-то сокет можно делать? ну то есть буфер для реконнекта

Dmitry
26.03.2018
22:55:23
Скорее всего хотели сделать изи чат

Получил сообщение от одного из клиентов - разослал всем

В принципе все остальные кейсы вообще не требуют роутинга и каналов как таковых

Но тогда можно просто взять cowboy

Alex
26.03.2018
23:09:51
Пока я делал вебинары, я ощутимо хлебнул дерьма с пабсабами и мне сложно принять, что такой набор примитивов является достаточным и вообще приносит пользу. Это конечно bias, но всё же имеющий под собой какие-то основания.

Dmitry
26.03.2018
23:16:31
@TTaraskin Для REST-интерфейса разница не чувствуется между cowboy-ем и n2o никак. Не удивительно, абстракция в 100 строчек, которая при этом не кастомизируется и всё равно переписывать с нуля - оставляет впечатление её отсутствия. В плане вебсокетов, ничего не могу сказать, документация и примеры у n2o, что я нашёл настолько скудные, что я предполагаю ( предположение), что на cowboy-е написать websocket server и минимальный ws client с нуля у меня получилось быстрее, чем я смог бы разобраться в n2o. Или точнее выяснить, что оно возможно снова что-то не то делает и нужно снова велосипедить самому.

В данном случае Plug показывает верх кастомизации(это преувеличение конечно), потому что даже если бы не было у плага нужных плагов, легко можно было бы написать нужный plug и изменить поведение, как и в каком порядке обрабатыватся. В случае с n2o - rest - выкидываешь rest, пишешь поверх ковбоя. Ну и остаётся ощущение, что пишешь на ковбое, а не на фреймворке, который должен что-то упрощать.

Google
Dmitry
26.03.2018
23:40:09
Я до опыта c n2o меньше ценил то, как хорошо сделан plug.

Taras ?
27.03.2018
12:03:40
@TTaraskin Для REST-интерфейса разница не чувствуется между cowboy-ем и n2o никак. Не удивительно, абстракция в 100 строчек, которая при этом не кастомизируется и всё равно переписывать с нуля - оставляет впечатление её отсутствия. В плане вебсокетов, ничего не могу сказать, документация и примеры у n2o, что я нашёл настолько скудные, что я предполагаю ( предположение), что на cowboy-е написать websocket server и минимальный ws client с нуля у меня получилось быстрее, чем я смог бы разобраться в n2o. Или точнее выяснить, что оно возможно снова что-то не то делает и нужно снова велосипедить самому.
яхз что там может быть сложно с вебсокетами в n2o есть html-страница (или основа, где есть только доктайп и маленький js который устанавливает вебсокет с сервером), есть модуль, есть функция event(init) — она срабатывает когда вебсокет-соединение установилось — удобно актуальную часть страницы обновить или вообще отправить и есть функции event({client,{your_huita}}) которые обрабатывают ваши запросы с клиента, дергаем клиент с сервера wf:wire("js_huita"), wf:wire(wf:f("js_huita('~s');",[Var])) и дергаем сервер с клиента ws.send(enc(tuple( atom('client'), tuple( atom('your_huita') ) ))) ( тут же — querySource('huita_id'), bin("huita"), number(777) ) я понимаю что Максим и его команда доку пишут только на инглише, и сам я жаловался что примеров не слишком много (ясен пень хотелось бы побольше, и еще я нитик и местами дурак), но блоть... с хера не зайти в чат разработчиков n2o, не спросить? вам ответят на ваш выбор — на инглише, русском или украинском, продложат 2-4 варианта решения вашей задачи ... я многое могу понять, одно понять не могу — почему люди люблят ныть\страдать и не спросят совета\помощи в кого-то более опытного? корона не отвалится же, люди...

В данном случае Plug показывает верх кастомизации(это преувеличение конечно), потому что даже если бы не было у плага нужных плагов, легко можно было бы написать нужный plug и изменить поведение, как и в каком порядке обрабатыватся. В случае с n2o - rest - выкидываешь rest, пишешь поверх ковбоя. Ну и остаётся ощущение, что пишешь на ковбое, а не на фреймворке, который должен что-то упрощать.
да, в n2o по умолчанию рест маленький, я тоже пилил на ковбое с другой стороны — не рестом единым — для рест и голый ковбой ок c n2o — прицепил epgsql, узял js-хеш-роутер, и можешь шаманить на одной страничке что-угодно, кучу табов с кастомными хеш-адресами, удобное обновление-подзагрузка по вебсокетами, ммм... думаю для трейдерского бота с графиками и тд — вообще милое дело ну как и для игр ))

Максим
27.03.2018
12:31:26
Всем привет! А подскажите как лучше сделать. Надо один раз в день в заданное время отсылать определённое сообщение. В итоге у меня получается два варината: либо через send_after мутить, либо в крон поставить вызов простенького скриптика с get запросом в контроллер феникса. Как правильно?

Anatoliy Kovalchuk
27.03.2018
12:32:11
Мне GenServer + send_after нравится больше

Vladimir
27.03.2018
12:33:07
есть ещё такое: https://github.com/erlware/erlcron

Anatoliy Kovalchuk
27.03.2018
12:33:10
например так https://github.com/Kr00lIX/gen_worker

Максим
27.03.2018
12:34:21
вау

Anatoliy Kovalchuk
27.03.2018
14:18:15
это учтено в gen_worker

Vladimir
27.03.2018
14:23:28
Anatoliy Kovalchuk
27.03.2018
14:24:46
при запуске высчитывает сколько милисикунд нужно до ближайшего времени запуска

Vladimir
27.03.2018
14:28:44
Ага, допустим что выполнение задачи завершилось неудачей и даже привело к падению ноды. Нода рестартовала. По-хорошему нужно ещё раз повторить выполнение задачи, ведь предыдущее не завершилось успешно. Как быть?

Dmitry
27.03.2018
14:30:20
во внешние источники историю запусков писать, проверять что был вызов *Костылинг*

Anatoliy Kovalchuk
27.03.2018
14:30:45
не думаю что за этим должен следить сам механизм воркера

Evgeny
27.03.2018
14:30:45
Скажите, а пихать в структуры поля, которые не предусмотрены в defstruct это моветон или обычное дело?

Vladimir
27.03.2018
14:32:52

Страница 918 из 1045