Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go Websocket控制消息_Go_Gorilla - Fatal编程技术网

Go Websocket控制消息

Go Websocket控制消息,go,gorilla,Go,Gorilla,我有两个关于Golang服务器和客户端的项目 问题是,当我从服务器发送控制消息时,我无法在客户端按类型获取它 几个服务器代码示例: 发送消息: ws.SetWriteDeadline(time.Now().Add(10 * time.Second)) ws.WriteMessage(websocket.PingMessage, new_msg) 发送关闭消息: ws.WriteControl(websocket.CloseMessage, websocket.FormatCloseMe

我有两个关于Golang服务器和客户端的项目

问题是,当我从服务器发送控制消息时,我无法在客户端按类型获取它

几个服务器代码示例:

发送消息:

ws.SetWriteDeadline(time.Now().Add(10 * time.Second))
ws.WriteMessage(websocket.PingMessage, new_msg)
发送关闭消息:

ws.WriteControl(websocket.CloseMessage,
    websocket.FormatCloseMessage(websocket.CloseNormalClosure, "socket close"),
        time.Now().Add(3 * time.Second))
客户端:

for{
    t, socketMsg, err := ws.ReadMessage()


    if websocket.IsUnexpectedCloseError(err) {
        webSock.keepLive()
    }

    switch t {
    case websocket.CloseNormalClosure:
        webSock.keepLive()

    case websocket.PingMessage:
        log.Warn("get ping!!!")

    case websocket.TextMessage:
        SocketChannel <- socketMsg
    }


}
但是PingMessage,我无法按类型获取:

case websocket.PingMessage:
    log.Warn("get ping!!!")
你能帮我一下,我做错了什么吗?

这个:

Connections通过使用SetCloseHandler方法调用handler函数集,并通过从NextReader、ReadMessage或message Read方法返回*CloseError来处理收到的关闭消息。默认关闭处理程序向对等方发送关闭消息

连接通过使用SetPingHandler方法调用处理程序函数集来处理收到的ping消息。默认的ping处理程序向对等方发送一条pong消息

连接通过使用SetPongHandler方法调用处理函数集来处理收到的pong消息。默认的pong处理程序不执行任何操作。如果应用程序发送ping消息,那么应用程序应该设置一个pong处理程序来接收相应的pong

将上述代码编写为:

ws.SetPingHandler(func(s string) error {
   log.Warn("get ping!!!")
   return nil
})

for {
    t, socketMsg, err := ws.ReadMessage()
    switch {
    case websocket.IsCloseError(websocket.CloseNormalClosure):
        webSock.keepLive()
    case websocket.IsUnexpectedCloseError(err):
        webSock.keepLive()
    case t == websocket.TextMessage:
        SocketChannel <- socketMsg
    }
}
for {
    t, socketMsg, err := ws.ReadMessage()
    if err != nil {
        break
    }
    SocketChannel <- socketMsg
}
ws.SetPingHandler(func(s字符串)错误{
log.Warn(“获取ping!!!”)
归零
})
为了{
t、 socketMsg,错误:=ws.ReadMessage()
开关{
案例websocket.IsCloseError(websocket.CloseNormalClose):
webSock.keepLive()
案例websocket.IsUnexpectedCloseError(错误):
webSock.keepLive()
案例t==websocket.TextMessage:

非常感谢你的帮助和解释
for {
    t, socketMsg, err := ws.ReadMessage()
    if err != nil {
        break
    }
    SocketChannel <- socketMsg
}