#elixir
#elixir
Вопрос:
Я использую Elixir 1.10.1 с Horde 0.8.3 в качестве серверного API для мобильного и веб-приложения. По сути, пользователь представлен a UserAgent
, сокращенно UA (реализован с помощью a GenServer
), который уникален для всего кластера и который существует до тех пор, пока существует хотя бы одно оперативное соединение от клиентского приложения. Клиенты могут подключаться много раз (телефон, планшет, Интернет, из дома, с работы и т. Д.); Каждое соединение представлено ConnectionAgent
сокращенно CA, которое уникально. CA работают до тех пор, пока пользователь не вышел из системы или срок действия сеанса не истек. По сути, у меня есть только уникальный UA, но у меня может быть несколько CA.
login
Процедура состоит из трех шагов
- После получения HTTP-запроса на вход (содержимое JSON)
login()
вызывается контроллер. После некоторых проверок он вызываетHorde.DynamicSupervisor.start_child(...)
создание и регистрацию нового центра сертификации. - Вызывается супервизор
ConnectionAgent.start_link()
, который, в свою очередь, вызываетGenServer.start_link()
с соответствующими параметрами и, в конечном итогеConnectionAgent.init()
, вызывается - Предполагается, что CA либо создаст новый UA, либо подключится к существующему, поэтому он вызывает `Horde.DynamicSupervisor.start_child(…)
В этот момент программа зависает, и я навсегда получаю следующие предупреждающие сообщения в консоли, и я определенно не знаю, что с ними делать:
[warn] Exit while fetching metrics from AlaaarmApi.DSup.
Skip poll action. Reason: {:timeout, {GenServer, :call, [AlaaarmApi.DSup, :get_telemetry, 5000]}}.
Я просто застрял, поэтому любой намек был бы полезен…
Ответ №1:
Вы проверили текущие и прошлые проблемы в библиотеке Horde?
Похоже, это проблема, связанная с Ордой. Это была, по крайней мере, известная проблема в Horde 0.8.2, которая должна была быть решена в 0.8.3 (см. Здесь и здесь тоже).
Откройте проблему в GitHub, и разработчики / пользователи обязательно помогут вам!
Комментарии:
1. Нет, я этого не делал, но по вашему совету я это сделал, и я добавил комментарий к делу (которое было закрыто). Сопровождающий определил проблему как тупиковую и посоветовал создать второго супервизора . Это фактически решило проблему.