Elixir:return websocket init 上的自定义错误
Elixir: return custom error on websocket init
您好,我正在开发 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 函数中这样做吗?
答案是仔细阅读文档。那么答案是:
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
您好,我正在开发 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 函数中这样做吗?
答案是仔细阅读文档。那么答案是: 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