十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
go get golang.org/x/net/websocket。 WebSocket在Golang中的应用实践

WebSocket是一种在单个TCP连接上进行全双工通信的协议,它使得浏览器和服务器之间可以实现实时双向通信,从而提高了用户体验,在Golang中,我们可以使用gorilla/websocket库来实现WebSocket服务器和客户端的功能,本文将介绍如何在Golang中使用WebSocket进行实时通信,并提供一些实践案例。
gorilla/websocket库我们需要安装gorilla/websocket库,在终端中输入以下命令:
go get github.com/gorilla/websocket
1、导入相关包:
import ( "fmt" "net/http" "github.com/gorilla/websocket" )
2、定义处理WebSocket连接的函数:
func handleConnections(w http.ResponseWriter, r *http.Request) {
// 将HTTP连接升级为WebSocket连接
ws, err := upgrader.Upgrade(w, r, nil)
if err != nil {
fmt.Println("Error upgrading connection:", err)
return
}
defer ws.Close()
for {
// 读取客户端发送的消息
_, message, err := ws.ReadMessage()
if err != nil {
fmt.Println("Error reading message:", err)
break
}
fmt.Printf("Received message: %s
", message)
// 将收到的消息原样返回给客户端
err = ws.WriteMessage(websocket.TextMessage, message)
if err != nil {
fmt.Println("Error writing message:", err)
break
}
}
}
3、在主函数中启动HTTP服务器并监听WebSocket连接:
func main() {
http.HandleFunc("/ws", handleConnections)
http.ListenAndServe(":8080", nil)
}
至此,我们已经创建了一个简单的WebSocket服务器,客户端可以通过访问ws://localhost:8080/ws与服务器建立连接并进行实时通信。
1、我们需要导入相关包:
import ( "fmt" "log" "os" "time" "github.com/gorilla/websocket" )
2、我们可以编写一个简单的WebSocket客户端,用于与服务器进行通信:
func main() {
// 建立WebSocket连接到服务器
conn, _, err := websocket.DefaultDialer.Dial("ws://localhost:8080/ws", nil)
if err != nil {
log.Fatal("Error connecting to server:", err)
}
defer conn.Close()
defer os.Exit(0)
// 每隔5秒向服务器发送一条消息,并接收一条回复消息打印出来
for i := 0; i < 5; i++ {
go func() { time.Sleep(5 * time.Second); conn.WriteMessage(websocket.TextMessage, []byte("Hello from client")) }()
msgType, msg, err := conn.ReadMessage() // 这里会阻塞等待服务器的回复消息,所以需要放在goroutine中执行以避免阻塞主线程,如果不需要阻塞等待,可以直接调用conn.ReadMessage(),err为nil表示收到了回复消息,如果err非nil,表示连接已关闭或发生错误,msg即为收到的回复消息。 fmt.Printf("Received message: %s
", msg) }()