Golang WebSocket Ping Pong_golang websocket 心跳包,2024年最新2024大厂Golang知识点总结
package main
import (
"fmt"
"net/url"
"time"
"github.com/gorilla/websocket"
)
var ws *websocket.Conn
func main() {
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)
u := url.URL{Scheme: "ws", Host: "example.com", Path: "/ws"}
var err error
ws, _, err = websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
os.Exit(1)
}
defer ws.Close()
done := make(chan struct{})
go func() {
defer close(done)
for {
_, message, err := ws.ReadMessage()
if err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
return
}
fmt.Printf("recv: %s\n", message)
}
}()
ticker := time.NewTicker(time.Second * 5)
defer ticker.Stop()
for {
select {
case <-done:
return
case t := <-ticker.C:
err := ws.WriteControl(websocket.PingMessage, []byte(fmt.Sprintf("%v", t)), time.Now().Add(time.Second))
if err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
return
}
}
}
}
这段代码使用了gorilla/websocket库来创建一个WebSocket连接。它定义了一个ping操作,每隔5秒发送一次心跳包(Ping message)来检查服务器的响应,并且如果在规定时间内没有收到服务器的响应(Pong message),则认为连接已经断开,并安全关闭连接。这是一个简单的心跳包实现,用于监测和维护WebSocket连接的健康性。
评论已关闭