Fork me on GitHub
#clojure-russia
<
2017-01-30
>
nwalkr09:01:27

привет. я хочу сделать такую тулзу - простой http-прокси, который один бэкэнд считает эталонным и сразу же отдает клиенту результат запроса к нему, а в фоне делает этот же запрос во второй, тестовый бэкэнд, сверяет ответы и куда-то репортит при несовпадении. с прокси-частью все просто - взял aleph, в нем все есть. а вот со сравнением ответов в фоне у меня есть некоторое непонимание - как вообще сделать обработку в фоне?

nwalkr09:01:37

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

artemyarulin09:01:07

по мне дак сделать внешнюю очередь и обрабатывать все там отдельно

nwalkr09:01:09

1 - этот прокси предполагается self-contained тулзой без зависимостей и предельно тупым деплойментом. если бы не “предельно тупой деплоймент”, я бы взял эрланг. 2 - зачем мне внешняя очередь, если у меня нормальный multicore рантайм? я на общем уровне понимаю, что мне нужно как-то сделать thread pool with bounded task queue, я не знаю, как это сделать из имеющихся у меня компонент.

andmed10:01:22

@nwalkr про асинк в кложе наверное подскажут, но есть запасной аэродром в виде java, можно подумать чтобы создать threadpoolexecutor или чего там, и оттуда же пускать любимую кложу

artemyarulin10:01:34

давненько не дергал алеф, но нельзя-ли просто создать manifold.deferred в конце реквеста и там сделать что надо + если надо координацию через простой атом ну или какой java queue механизм

seryh12:01:29

обычный (future ) это и будет отдельный поток, не подойдет?

artemyarulin12:01:10

ну у aleph там своя обертка уже есть в виде этого manifold.deferred

artemyarulin12:01:20

хотя суть одна да

leov16:01:35

привет всем

leov16:01:49

а я в машине посмотрел русский хангаут с маньяками из джетбрейнз. О_о

leov16:01:18

осталась пара вопросов 1. они здесь, на канале среди нас?) 2. код куда-нибудь выложен?

artemyarulin16:01:07

о чем хоть речь?

leov16:01:49

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

leov16:01:21

ещё, кажется, по описанию их система не может работать когда клиентов больше нескольких десятков. кажется.

andre16:01:45

кода нет, они среди нас 🙂

leov16:01:48

а скажи их ники 🙂 может потом в привате докопаться, что там к чему) интересно всё же

leov17:01:54

ещё кстати нубский вопрос по фронт-энду у меня есть меню, выбирающее из трёх компонентов, и в первом из них подменю

leov17:01:59

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

a.espolov17:01:50

@leov: 1. Через стейт аппа, путем изменения этого стейта 2. Через стейт компонента, путем изменения стейта компоненты в нужно чилдрене

a.espolov17:01:04

С первым меньше мороки

leov18:01:33

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

leov18:01:54

я так понимаю, надо перемоделировать каждый конечный маршрутизируемый компонент как рутовый

leov18:01:35

то есть маршрутизатор навёл на A/2 значит это будет рутовый компонент, который дёрнет разметку A, а тот в свою очередь дёрнет разметку/компонент Root

leov18:01:46

так покатит?