Go Websocket控制消息
我有两个关于Golang服务器和客户端的项目 问题是,当我从服务器发送控制消息时,我无法在客户端按类型获取它 几个服务器代码示例: 发送消息: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
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
}