使用Golang实现Websocket编程 Websocket是一种在浏览器和服务器之间进行全双工通信的技术。在传统的HTTP通信中,浏览器只能向服务器发起请求,服务器在处理请求后会返回响应。但在Websocket中,浏览器和服务器之间建立了一个长连接,使得数据可以在双方之间实时传输。 本文将介绍如何使用Golang实现Websocket编程。我们将使用标准库中的`net/http`和`golang.org/x/net/websocket`包来完成这个任务。 准备工作 在开始之前,要确保你已经安装了Golang。如果还没有安装,可以参考这个链接来安装:https://golang.org/doc/install 接着我们来创建一个新的Go模块,首先创建一个文件夹: ``` mkdir websocket-demo cd websocket-demo ``` 然后执行下面的命令来初始化一个新的Go模块: ``` go mod init websocket-demo ``` 这个命令将会创建一个`go.mod`文件,用来记录模块依赖关系。 实现Websocket服务器 现在我们开始实现Websocket服务器。创建一个`main.go`文件,并在其中添加如下代码: ```go package main import ( "fmt" "golang.org/x/net/websocket" "net/http" ) func main() { http.Handle("/ws", websocket.Handler(wsHandler)) fmt.Println("Server started at http://localhost:8080") http.ListenAndServe(":8080", nil) } func wsHandler(ws *websocket.Conn) { fmt.Println("Websocket connection established") var msg = "" for { err := websocket.Message.Receive(ws, &msg) if err != nil { fmt.Println("Connection closed") break } fmt.Printf("Received message: %s\n", msg) err = websocket.Message.Send(ws, msg) if err != nil { fmt.Println("Connection closed") break } } } ``` 这段代码中,我们首先使用`http.Handle()`函数来为Websocket连接监听路径`/ws`,并将监听函数`wsHandler`作为参数传入。`wsHandler`用来处理客户端和服务器之间的通信,它接收一个`websocket.Conn`类型的参数,表示一个Websocket连接。 在`wsHandler`中,我们首先打印一条"Websocket connection established"的日志,表示连接已经建立。然后使用`websocket.Message.Receive()`函数来接收客户端发送的消息,并使用`websocket.Message.Send()`函数将接收到的消息回传给客户端。如果有任何错误发生,我们将打印一条"Connection closed"的日志,并退出循环。 现在我们来运行这个程序,执行下面的命令: ``` go run main.go ``` 这个命令将会运行我们的Websocket服务器。在浏览器中输入`http://localhost:8080`,并打开控制台,在控制台中输入以下代码即可连接到Websocket服务器: ```javascript var ws = new WebSocket("ws://localhost:8080/ws"); ws.onopen = function() { console.log("Websocket connection established"); ws.send("Hello, server!"); }; ws.onmessage = function(evt) { console.log("Received message: " + evt.data); }; ws.onclose = function() { console.log("Websocket connection closed"); }; ``` 这段代码中,我们首先使用`WebSocket`对象来建立一个与服务器的连接。当连接建立成功后,我们打印一条"Websocket connection established"的日志,并使用`ws.send()`函数来向服务器发送一条消息。当我们接收到服务器返回的消息时,我们会打印一条"Received message: "的日志,并将消息内容输出。最后,当连接关闭时,我们将会打印一条"Websocket connection closed"的日志。 现在我们来尝试在控制台中输入`Hello, server!`,看看程序是否能够将消息回传给我们。如果一切正常,我们将在控制台中看到以下输出: ``` Received message: Hello, server! ``` 总结 在本文中,我们介绍了如何使用Golang实现Websocket编程。我们使用标准库中的`net/http`和`golang.org/x/net/websocket`包来实现了一个简单的Websocket服务器,并用浏览器发送了一个测试消息。希望这个示例可以帮助你更好地理解Websocket的工作原理,以及如何使用Golang来实现Websocket编程。