在Go语言中,使用websocket包可以轻松地进行WebSocket编程。下面介绍一下在Go语言中使用websocket包进行WebSocket编程的基本流程。
- 建立WebSocket服务器
使用http.ListenAndServe()函数建立一个简单的WebSocket服务器。示例代码如下:
package main
import (
"fmt"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{}
func handler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
fmt.Println("upgrade:", err)
return
}
defer conn.Close()
for {
messageType, p, err := conn.ReadMessage()
if err != nil {
fmt.Println("read:", err)
break
}
fmt.Printf("recv: %s\n", p)
err = conn.WriteMessage(messageType, p)
if err != nil {
fmt.Println("write:", err)
break
}
}
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
在该示例代码中,我们定义了一个名为handler的处理器函数,在其中建立了一个WebSocket连接,并实现了简单的消息回显功能。然后通过调用http.HandleFunc()函数将该处理器函数注册到默认的ServeMux路由器上,最后通过调用http.ListenAndServe()函数启动服务器。
- 发起WebSocket请求
在客户端发起一个WebSocket请求,可以使用gorilla/websocket包提供的Dial()方法发起连接。示例代码如下:
package main
import (
"fmt"
"log"
"net/url"
"github.com/gorilla/websocket"
)
func main() {
u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/"}
log.Printf("connecting to %s", u.String())
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
log.Fatal("dial:", err)
}
defer c.Close()
message := []byte("Hello, world!")
err = c.WriteMessage(websocket.TextMessage, message)
if err != nil {
log.Println("write:", err)
return
}
messageType, p, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
return
}
fmt.Printf("recv: %s\n", p)
}
在该示例代码中,我们使用url.URL定义了WebSocket服务器的地址,并通过调用websocket.DefaultDialer.Dial()方法建立了一个WebSocket连接。然后发送一条消息并读取回显消息。
总之,在Go语言中使用websocket包进行WebSocket编程非常简单易懂,只需要掌握基本的WebSocket协议和一些常见API即可。




