Size: a a a

Эликсир и Вунш

2019 May 10

V

Vladislav in Эликсир и Вунш
народ, кто-то настраивал интеграцию с интернет банкингом через money.pro?
в смысле для личного пользования
делается это через компанию www.saltedge.com
кто-то знает, как они это делают, насколько адекватно этим пользоваться?
я так понимаю, что они использую какое-то back-back взаимодействие с банками.
вопрос собственно в том, можно ли доверять этой конторе, может кто-то уже использует
источник

🔅S

🔅 Oleg Savchenko 🔅 in Эликсир и Вунш
По вебсокетам для начинающих кто-то подсказать может? Видимо какая-то особенность эликсира, пока не доступная пониманию после других языков-с...

Есть библиотека WebSockex. Есть примеры и так далее - но они все касаются работы с ПОДПИСКАМИ (subscriptions) и там все понятно: в одной функции подключаюсь по вебсокету, получаю при этом ПИД и тут же использую этот ПИД для подписки на нужные "каналы". С этим нет вопросов...

Но вот для работы по вебсокетам с неким сервисом мне надо периодически (постоянно) отправлять запросы-фреймы, а не только работать с подписками. И для таких запросов мне (ЧАЙНИКУ) в голову пока пришла только глупая идея постоянно устанавливать соединение, получая при этом ПИД, и с его помощью отправлять запрос...То есть КАЖДЫЙ запрос - это связка из нового соединения и собственно запроса. Но это же дикость какая-то??!!

Совершенно очевидно, что есть другой более приличный способ, просто я его пока не нашел....
Сами коды указанных функций сюда не кидаю - не вижу смысла. Вопрос именно в том, как бы из любого места программы получить ПИД текущего (уже ранее установленного) вебсокет соединения при использовании библиотеки WebSockex??? Или может посоветуете другую более вменяемую в этом плане библиотеку? Ну не вижу я функции ипа "гет-куррент-пид" или чего-то подобного в документации и примерах по WebSockex
источник

IA

Ilya Averyanov in Эликсир и Вунш
а чем этот пример плох?
источник

IA

Ilya Averyanov in Эликсир и Вунш
из Readme
источник

IA

Ilya Averyanov in Эликсир и Вунш
источник

🔅S

🔅 Oleg Savchenko 🔅 in Эликсир и Вунш
Тем что это работа с ПОДПИСКОЙ - handle_frame перехватывает ПРИЛЕТАЮЩИЕ фреймы, ане отправляет фреймы с запросами от меня. Для ОТПРАВКИ нужна такая штуковина:

WebSockex.send_frame(mYpid, {:text, Poison.encode!(%{
           id: 2,
           method: "/private/" <> url,
           jsonrpc: "2.0",
           params: params
       })})

И первый её параметр - тот самый неизвестный мне ПИД. Для получения которого я каждый раз и вызываю start_link из указанного Вами примера. Вот так:

{:ok, mYpid} = start()
источник

IA

Ilya Averyanov in Эликсир и Вунш
так вон же, положили
источник

IA

Ilya Averyanov in Эликсир и Вунш
  def handle_cast({:send, {type, msg} = frame}, state) do
   IO.puts "Sending #{type} frame with payload: #{msg}"
   {:reply, frame, state}
 end
источник

IA

Ilya Averyanov in Эликсир и Вунш
обработчик cast возвращает frame на отправку
источник

🔅S

🔅 Oleg Savchenko 🔅 in Эликсир и Вунш
О! Верно ли я понимаю Вас, что handle_cast это замена используемого мною send_frame???
Я так понял, что это ПЕРЕХВАТЧИК того, что я отправил по send_frame...
Видимо понял неверно... Ок, спасибо, буду пробовать
источник

IA

Ilya Averyanov in Эликсир и Вунш
{:ok, pid} = WebSocketExample.start_link(url, state)
...
# потом где-то в программе
GenServer.cast(pid, {:send, {type, msg}})
источник

ML

Maksim Lapshin in Эликсир и Вунш
Ilya Averyanov
{:ok, pid} = WebSocketExample.start_link(url, state)
...
# потом где-то в программе
GenServer.cast(pid, {:send, {type, msg}})
Он не может понять, как ему найти пид вебсокета в том месте, где ему нужно отправить сообщение
источник

🔅S

🔅 Oleg Savchenko 🔅 in Эликсир и Вунш
Так вот это самое "потом где-то в программе" и упирается в ПИД... а брать его откуда? Я именно про это и спрашиваю. Ничего подобного глобальным переменным я в эликсире пока не нашел, а если вызов соединения идет из одной функции, а отправка запроса из совершенно другой, то этот ПИД от соединения уже недоступен, вот я и изобретал "костыли"
источник

🔅S

🔅 Oleg Savchenko 🔅 in Эликсир и Вунш
Maksim Lapshin
Он не может понять, как ему найти пид вебсокета в том месте, где ему нужно отправить сообщение
точно, именно!
источник

ML

Maksim Lapshin in Эликсир и Вунш
🔅 Oleg Savchenko 🔅
О! Верно ли я понимаю Вас, что handle_cast это замена используемого мною send_frame???
Я так понял, что это ПЕРЕХВАТЧИК того, что я отправил по send_frame...
Видимо понял неверно... Ок, спасибо, буду пробовать
А как ты получишь хендлер открытого вебсокета в яваскрипте?
источник

IA

Ilya Averyanov in Эликсир и Вунш
ну Process.register(pid, name) как самое проcтое
источник

ML

Maksim Lapshin in Эликсир и Вунш
🔅 Oleg Savchenko 🔅
Так вот это самое "потом где-то в программе" и упирается в ПИД... а брать его откуда? Я именно про это и спрашиваю. Ничего подобного глобальным переменным я в эликсире пока не нашел, а если вызов соединения идет из одной функции, а отправка запроса из совершенно другой, то этот ПИД от соединения уже недоступен, вот я и изобретал "костыли"
Потому что не очень хорошо обьяснено что такое глобальные переменные
источник

🔅S

🔅 Oleg Savchenko 🔅 in Эликсир и Вунш
Maksim Lapshin
А как ты получишь хендлер открытого вебсокета в яваскрипте?
через ГЛОБАЛЬНУЮ перменную ws

ws = new WebSocket(testnet ? 'wss://test.deribit.com/ws/api/v2' : 'wss://www.deribit.com/ws/api/v2');
источник

IA

Ilya Averyanov in Эликсир и Вунш
это если start_link не пробрасывает параметры в GenServer
источник

ML

Maksim Lapshin in Эликсир и Вунш
Начни с глобальной регистрации процесса, который держит сокет
источник