Size: a a a

2020 July 23

ŹR

Źmićer Rubinštejn in pro.elixir
D
Все-таки есть какая либо стандартная практика обработки таймаута call генсервера или тут нормально с try catch?
Падение вебсокета - это исключительная ситуация.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Все работает так как и должно работать
источник

D

D in pro.elixir
Спасибо
источник

ŹR

Źmićer Rubinštejn in pro.elixir
DynamicSupervisor перезапустит твой formworker, а следующий запрос сработает
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Есть хоть одна причина ловить что-то посредине?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Ну, типа ты сделаешь try, и что будет в catch?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Отправишь 500 ошибку? Так феникс ее и так отправит
источник

D

D in pro.elixir
Мне как раз не надо чтобы феникс падал с 500
источник

D

D in pro.elixir
Скорее алерт выдать
источник

D

D in pro.elixir
Źmićer Rubinštejn
Ну, типа ты сделаешь try, и что будет в catch?
В catch будет ретрай вебсокета
источник

D

D in pro.elixir
Catch находится в FormWorker - обрабатывает неудачный send_frame вебсокета
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Я конечно не знаю, как там под капотом работает, но почему этот retry должен сработать?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Я всегда думал, что если фрейм не послался - то конец. Интернет закончился, или еще что-то такое
источник

D

D in pro.elixir
потому что на той стороне вебсокета питоновский сервак который любит иногда делать disconnect и ретрай помогает
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Очевидно websockex - херовая либа
источник

D

D in pro.elixir
Źmićer Rubinštejn
Очевидно websockex - херовая либа
да, уже не первый проект с ней мучаюсь, но какая альтернатива?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Если можешь - возьми gun. Ну или придется оборачивать в try-catch
источник

ŹR

Źmićer Rubinštejn in pro.elixir
@doc """
 Sends a frame through the WebSocket.
 If the connection is either connecting or closing then this will return an
 error tuple with a `WebSockex.NotConnectedError` exception struct as the
 second element.
 If a connection failure is discovered while sending then it will return an
 error tuple with a `WebSockex.ConnError` exception struct as the second
 element.
 """
 @spec send_frame(client, frame) ::
         :ok
         | {:error,
            %WebSockex.FrameEncodeError{}
            | %WebSockex.ConnError{}
            | %WebSockex.NotConnectedError{}
            | %WebSockex.InvalidFrameError{}}
         | none
 def send_frame(client, _) when client == self() do
   raise %WebSockex.CallingSelfError{function: :send_frame}
 end

 def send_frame(client, frame) do
   try do
     {:ok, res} = :gen.call(client, :"$websockex_send", frame)
     res
   catch
     _, reason ->
       exit({reason, {__MODULE__, :call, [client, frame]}})
   end
 end
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Вот что это за говнокод ебучий
источник

D

D in pro.elixir
ага, вот это и есть тот самый exit({reason, {__MODULE__, :call, [client, frame]}})
источник