在Go语言中,可以使用标准库net/http和github.com/gorilla/websocket来实现WebSocket服务。
首先,需要导入依赖包:
import (
"fmt"
"log"
"net/http"
"github.com/gorilla/websocket"
)
然后定义一个Upgrader对象,用于将普通的HTTP连接升级为WebSocket连接:
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
// 允许跨域访问
CheckOrigin: func(r *http.Request) bool {
return true
},
}
接着,在HTTP处理函数中,判断请求是否是WebSocket连接请求,并调用upgrader.Upgrade()方法将其升级为WebSocket连接:
func wsHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println(err)
return
}
for {
messageType, p, err := conn.ReadMessage()
if err != nil {
log.Println(err)
return
}
// 处理收到的消息
// 回复消息
err = conn.WriteMessage(messageType, p)
if err != nil {
log.Println(err)
return
}
}
}
其中,conn.ReadMessage()方法用于读取客户端发送的消息,返回值是消息类型、消息内容和错误信息;conn.WriteMessage()方法用于向客户端发送回复消息。这里只是简单地回复了收到的消息。
最后,在main()函数中,注册WebSocket服务的处理函数:
func main() {
http.HandleFunc("/ws", wsHandler)
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
现在,启动程序并访问http://localhost:8080/ws即可连接到WebSocket服务。




