@proelixir

Страница 340 из 1045
Alexander
15.02.2017
09:06:02
https://github.com/phoenixframework/phoenix/blob/master/lib/phoenix/transports/websocket.ex транспорт для Socket'а, как и https://github.com/phoenixframework/phoenix/blob/master/lib/phoenix/transports/long_poll.ex

Ivan
15.02.2017
09:06:33
ok.. а что использовать для работы с сокетом оси?

Aldar
15.02.2017
09:06:53
ok.. а что использовать для работы с сокетом оси?
да что угодно, или имеется ввиду эликсир?

Google
Ivan
15.02.2017
09:07:10
elixir

Alexander
15.02.2017
09:07:21
afunix например

гуглится ещё какая-то альтернатива, я забыл какая

Alexander
15.02.2017
09:08:16
@che_onza для какой задачи?

Ivan
15.02.2017
09:09:11
куча пакетов сыпятся на сокет .. обработка этих пакетов и запись в бд данных

Alexey
15.02.2017
09:09:26
gen_tcp

Alexander
15.02.2017
09:09:30
сокет - unix сокет?

Ivan
15.02.2017
09:09:44
да unix soket

Aldar
15.02.2017
09:10:27
Alexander
15.02.2017
09:10:57
https://github.com/tonyrog/afunix ну и обработчик пакетов пиши поверх него, интерфейс как у gen_tcp вроде

о, а gen_tcp вроде бы тоже умеет в unix socket'ы

Ivan
15.02.2017
09:14:16
спасибо)

Евгений
15.02.2017
09:14:16
почему тогда долбаный экто не может подключиться на постгрес? :)

Google
Yaroslav
15.02.2017
09:14:56
Долбаный экто может

Новая версия не умеет в эскулайт, а в постгрес может

Alexander
15.02.2017
09:17:09
кстати оно вроде как experimental появилось только в 19, какой сейчас статус - непонятно, пометки что оно experimental нет

Евгений
15.02.2017
09:17:38
https://www.erlang.org/news/tag/%20OTP-19.0

Капитан
15.02.2017
10:23:20
Коллеги как приложение на phoenixframework запустить как службу в UBUNTU, так чтобы после перезапуска или падения приложение запускалось?

ок буду пробовать благодарю! $ cat /etc/systemd/system/myapp.service [Unit] Description=my app [Service] User=erl WorkingDirectory=/home/erl ExecStart=/home/erl/bin/myapp foreground

Max
15.02.2017
11:55:36
ето, а в еликсире пулы по-прежнему через пулбой принято делать, или что-то лучше придумали?

Alexander
15.02.2017
11:58:18
пулбой, альтернатив нет

если только poolgirl :D

Max
15.02.2017
12:01:17
а как в пулбой засунуть уникальные идентификаторы для каждого воркера?

допустим я хочу их 500 штук, и чтобы у каждого было 1, 2, 3, 4, ..., 500

и потом при работе какой дёрнется, такой и использует работу с таким ID

или я где-то туплю и не вижу очевидного?

Mikhail
15.02.2017
12:02:55
ПУСТЬ КАЖДЫЙ ВОРКЕР ПРИ ИНИЦИЛИЗАЦИИ ДЁРГАЕТ НЕКИЙ ГЕНСЕРВЕР И ПОЛУЧАЕТ ОТ НЕГО ИДЕНТИФИКАТОР

Max
15.02.2017
12:03:32
СУПЕРВАЙЗОР ДЛЯ ПРОЦЕССА РАЗДАЮЩЕГО НАТУРАЛЬНЫЕ ЧИСЛА

Alexander
15.02.2017
12:03:33
можно же зарегать воркер в Registry при старте и всо

Max
15.02.2017
12:03:47
а что это даст?

я Registry ещё не использовал ни разу

Alexander
15.02.2017
12:05:48
вообще не очень понял, что ты хочешь получить... сливать задачи по ID на определенный воркер в пуле?

Google
Max
15.02.2017
12:07:50
не

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

Alexander
15.02.2017
12:09:18
Registry - замена для gproc'а прост... рандомный? что при рестарте процесса? он должен сохранить этот ID?

Max
15.02.2017
12:09:59
и когда он делает работу — делает её с этим ID

Зачем это надо?
в моём случае — порт, который надо слушать из пула портов

т.е. есть 5000..5500 порты

я дёргаю воркер из пула, узнаю его порт и работаю с ним

одна сессия работает с одним воркером

они запускаются и гасятся

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

перестал — погас

Dmitry
15.02.2017
12:12:43
Вообще то такое можно сделать с помощью registry, но смысла я не вижу

Если ты делаешь stateless сервер, то тебе без разницы какой из воркеров обрабатывает запрос

А если делаешь stateful - то state определятся должен уж точно не портом

Что возвращает нас к тому что ты можешь узнать state в любом воркере, и тебе без разницы каким именно обрабатывать

А для этого ставится poolboy, а стейт выносится из воркера

Max
15.02.2017
12:16:49
Если ты делаешь stateless сервер, то тебе без разницы какой из воркеров обрабатывает запрос
мне без разницы какой обрабатывает запрос, но мне надо, чтобы каждый обрабатывал свой порт

чтобы порты были в заданном диапазоне и каждый использовался только одним воркером

или запустить 500 simple_one_for_one?

Google
Max
15.02.2017
12:18:06
т.е. мне нужен пул целых чисел

Alexander
15.02.2017
12:20:15
можно хранить список портов в Agent'е, при старте воркера брать из него порт, после завершения возвращать его обратно в список

Max
15.02.2017
12:25:21
что за агент?

Alexander
15.02.2017
12:26:47
абстракция для хранения стейта, почти GenServer, только проще

Dmitry
15.02.2017
12:28:49
Используй ets

Max
15.02.2017
12:31:20
Используй ets
ага, монгодб ещё приделать

целые числа хранить

Alexander
15.02.2017
12:31:39
:D

Admin
ERROR: S client not available

Alexander
15.02.2017
12:31:51
MapSet и Agent - норм варик

Dmitry
15.02.2017
12:32:21
А в чем проблема ets?

Max
15.02.2017
12:33:06
да, Agent похоже то, что нужно

спасибо!

Dmitry
15.02.2017
12:35:30
Ets не создаёт отдельных процессов, хорошо масштабируется, очень быстрая, хранится в оперативке. И ещё не теряет данные если supervision tree упадёт. Запись чтение одной командой. Для пула где надо set pop/push идеально.

Alexey
15.02.2017
12:36:17
да. чем ets не нравится - тож не понимаю. а Agent где-то видел, что их вообще не рекомендуют к применению. изобретение эликсирщиков.

Max
15.02.2017
12:36:31
хм

Dmitry
15.02.2017
12:38:27
Агент туповат потому что его отдельным модулем не импортировать, и получается что для его изменения надо писать лямбду, а это выглядит не очень - как callback hell в js. Я во всяком случае всегда использую gen server вместо агента

Alexey
15.02.2017
12:39:04
не смогу найти ссыль на обсуждение, но это точно было

даже валима туда приплетали, что идея с агентами плохая

это как идея с оберткой над gen_fsm. сначала ее вроде бы сделали. а потом выпилили насовсем. и оставили либо пользуй стандартным ерланговым путем. или сторонней либой, не входящей в состав эликсир

Google
Alexey
15.02.2017
12:41:38
ets и dets самый что нинаесть стандартный функционал, входящий прям в состав ерланга. его даже как библиотеку тянуть и доставлять не нужно. пользуйте его наздоровье

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

Max
15.02.2017
12:44:16
так мне же надо и помечать тогда в ETS, какой порт занят

Dmitry
15.02.2017
12:45:04
Делаешь set и смотришь есть там порт или нет. Если есть - удаляешь, если нету - значит занято

Max
15.02.2017
12:48:19
два процесса смотрят один порт — есть, удаляют, начинают использовать

Alexey
15.02.2017
12:48:21
я делал, у меня супервизор отлавылиывал смерть воркеров (нормальную или ненормальную) и убирал

Max
15.02.2017
12:48:23
один падает

Alexey
15.02.2017
12:54:30
упадет - и норм.

у вас и первый может упасть по неведомой причине

Max
15.02.2017
12:54:53
по какой? порт нельзя слушать?

Alexey
15.02.2017
12:55:31
либо работу с выдачей номеров - етс кладете в генсервер. тогда он один порт двоим не выдаст

Max
15.02.2017
12:56:08
так-то да, но если генсервер, то зачем в нём етс, и чем это отличается от Agent?

Alexey
15.02.2017
12:56:12
это как раз тот случай, когда параллельное чтение не нужно

можно и не етс. я бы мап использовал

агенты не пользую. так что не подскажу

Alexander
15.02.2017
13:05:55
зачем с ets оверинжинирить непонятно, объемы небольшие и стейта процесса для этого заглаза хватит

https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/agent.ex реализация агента, там видно что это и зачем это

@mtreskin щас ещё модно на GenStage всё перепиливать, с ним можно и без poolboy обойтись поидее

Alexey
15.02.2017
13:12:30
про него писали даже недавно. https://habrahabr.ru/post/317724/

Alexander
15.02.2017
13:24:07
https://github.com/elixir-lang/gen_stage

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