在Golang中,可以使用net/http和gorilla/websocket包实现Websocket协议。代码示例:
go
// 实现websocket服务器
handler := func(w http.ResponseWriter, r *http.Request) {
upgrader := websocket.Upgrader{}
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println(err)
return
}
for {
// 读取客户端消息
msgType, msg, err := conn.ReadMessage()
if err != nil {
log.Println(err)
return
}
// 将消息回显给客户端
if err = conn.WriteMessage(msgType, msg); err != nil {
return
}
}
}
func main() {
http.HandleFunc("/ws", handler)
log.Fatal(http.ListenAndServe(":8000", nil))
}
该示例使用net/http启动HTTP服务器,并注册/ws路径使用handler处理Websocket请求,handler通过websocket.Upgrader升级为Websocket连接,并在连接上回显客户端发送的消息。
go
// 实现websocket客户端
conn, _, err := websocket.DefaultDialer.Dial("ws://localhost:8000/ws", nil)
if err != nil {
log.Fatal(err)
}
for {
// 发送消息给服务器
if err := conn.WriteMessage(websocket.TextMessage, []byte("hello")); err != nil {
log.Fatal(err)
}
// 读取服务器消息
msgType, msg, err := conn.ReadMessage()
if err != nil {
log.Fatal(err)
}
log.Printf("Received: %s", msg)
}
客户端使用websocket.DefaultDialer访问/ws路径建立websocket连接,并在连接上发送消息与读取服务器回显的消息。