Go 语言 实现WebSocket实时通信示例

Go阿木 发布于 24 天前 3 次阅读


Go 语言实现WebSocket实时通信示例

WebSocket是一种在单个TCP连接上进行全双工通信的协议。它允许服务器和客户端之间进行实时数据交换,无需轮询或长轮询等传统方法。Go 语言因其高效的并发处理能力和简洁的语法,成为实现WebSocket通信的理想选择。本文将围绕Go语言,通过一个简单的示例,展示如何实现WebSocket实时通信。

环境准备

在开始之前,请确保您的系统中已安装Go语言环境。您可以从[Go官方下载页面](https://golang.google.cn/dl/)下载并安装Go语言。

示例代码

以下是一个简单的WebSocket实时通信示例,包括服务器端和客户端代码。

服务器端代码

go

package main

import (


"fmt"


"net/http"


"github.com/gorilla/websocket"


)

var upgrader = websocket.Upgrader{


ReadBufferSize: 1024,


WriteBufferSize: 1024,


}

func handler(w http.ResponseWriter, r http.Request) {


conn, err := upgrader.Upgrade(w, r, nil)


if err != nil {


fmt.Println("Upgrade error:", err)


return


}


defer conn.Close()

for {


_, message, err := conn.ReadMessage()


if err != nil {


fmt.Println("Read error:", err)


return


}


fmt.Printf("Received: %s", message)

err = conn.WriteMessage(websocket.TextMessage, message)


if err != nil {


fmt.Println("Write error:", err)


return


}


}


}

func main() {


http.HandleFunc("/", handler)


http.ListenAndServe(":8080", nil)


}


客户端代码

go

package main

import (


"fmt"


"net/http"


"github.com/gorilla/websocket"


)

var upgrader = websocket.Upgrader{


ReadBufferSize: 1024,


WriteBufferSize: 1024,


}

func main() {


conn, err := upgrader.Dial("ws://localhost:8080", nil)


if err != nil {


fmt.Println("Dial error:", err)


return


}


defer conn.Close()

for {


message := fmt.Sprintf("Hello from client!")


err = conn.WriteMessage(websocket.TextMessage, []byte(message))


if err != nil {


fmt.Println("Write error:", err)


return


}

_, message, err := conn.ReadMessage()


if err != nil {


fmt.Println("Read error:", err)


return


}


fmt.Printf("Received: %s", message)


}


}


代码解析

服务器端

1. 引入必要的包,包括`fmt`、`net/http`和`github.com/gorilla/websocket`。

2. 定义`upgrader`变量,用于升级HTTP连接为WebSocket连接。

3. 定义`handler`函数,用于处理WebSocket连接。

- 使用`upgrader.Upgrade`将HTTP连接升级为WebSocket连接。

- 使用`conn.ReadMessage`读取客户端发送的消息。

- 使用`conn.WriteMessage`将消息发送回客户端。

4. 在`main`函数中,设置HTTP处理函数和监听端口。

客户端

1. 引入必要的包,包括`fmt`、`net/http`和`github.com/gorilla/websocket`。

2. 定义`upgrader`变量,用于升级HTTP连接为WebSocket连接。

3. 在`main`函数中,使用`upgrader.Dial`连接到服务器端的WebSocket地址。

4. 使用`conn.WriteMessage`向服务器发送消息。

5. 使用`conn.ReadMessage`读取服务器发送的消息。

总结

本文通过一个简单的示例,展示了如何使用Go语言实现WebSocket实时通信。在实际应用中,您可以根据需求对代码进行扩展,例如添加身份验证、消息加密等安全措施。希望本文对您有所帮助。