Elixir:在websocket初始化上返回自定义错误

时间:2019-06-05 16:55:42

标签: websocket elixir cowboy

您好,我正在使用Websocket服务器,该服务器还应该通过用户和用户令牌对用户进行身份验证。但是我还需要区分为什么在客户端上断开了websocket的原因,如果出现意外错误,请重新连接。

defmodule MyApp.SocketHandler do
  def init(request, _state) do
    ...
    case UserAuthenticator.auth(user_id, user_token)
      {:ok, :successful_authentication} -> 
        state = %{...}
        {:cowboy_websocket, request, state}
      _ ->
        <how to implement the custom error code here and terminate connection properly>
    end
  end
end

所以问题是如何正确终止websocket连接,我应该在init函数中这样做吗?

1 个答案:

答案 0 :(得分:1)

答案是要仔细阅读文档。答案是: init函数是处理身份验证的错误位置。应该在websocket_init中完成。

说明可以在这里找到: https://ninenines.eu/docs/en/cowboy/2.6/guide/ws_handlers/

因此要正确关闭连接,我们可以这样做:

def websocket_init(state) do
  {:reply, {:close, 1000, "reason"}, state}
end