您好,我正在使用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函数中这样做吗?
答案 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