使用Go语言创建WebSocket服务器和客户端 您所在的位置:网站首页 go实现rpc 使用Go语言创建WebSocket服务器和客户端

使用Go语言创建WebSocket服务器和客户端

2023-07-31 21:42| 来源: 网络整理| 查看: 265

WebSocket 是一种新型的网络通信协议,可以在 Web 应用程序中实现双向通信。在这篇文章中,我们将介绍如何使用 Go 语言编写一个简单的 WebSocket 服务器。

首先,我们需要使用 Go 的 net/http 包创建一个 HTTP 服务器。在这个服务器中,我们将创建一个用于处理 WebSocket 连接的函数 handleWebSocket。在该函数中,我们将使用 gorilla/websocket 包来处理 WebSocket 连接。

goCopy code package main import ( "log" "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, CheckOrigin: func(r *http.Request) bool { return true }, } func main() { // 创建HTTP服务器 http.HandleFunc("/ws", handleWebSocket) log.Println("Server started on :8080") log.Fatal(http.ListenAndServe(":8080", nil)) } func handleWebSocket(w http.ResponseWriter, r *http.Request) { // 升级HTTP连接为WebSocket连接 conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) return } defer conn.Close() // 处理WebSocket连接 for { // 读取消息 messageType, p, err := conn.ReadMessage() if err != nil { log.Println(err) return } log.Println("Received message:", string(p)) // 发送消息 err = conn.WriteMessage(messageType, []byte("Hello, world!")) if err != nil { log.Println(err) return } } } 复制代码

在这个示例中,我们使用 gorilla/websocket 包创建了一个 WebSocket 服务器。我们创建了一个 upgrader 实例,并将其用于升级 HTTP 连接为 WebSocket 连接。然后,我们在 handleWebSocket 函数中处理 WebSocket 连接。在该函数中,我们使用 conn.ReadMessage 方法读取从客户端发送的消息,并使用 conn.WriteMessage 方法将消息发送回客户端。

要测试这个 WebSocket 服务器,我们可以使用任何 WebSocket 客户端。例如,我们可以使用浏览器的 JavaScript WebSocket API。以下是一个简单的 HTML 文件,使用 JavaScript WebSocket API 连接到我们的 WebSocket 服务器:

htmlCopy code WebSocket Test var ws = new WebSocket("ws://localhost:8080/ws"); ws.onopen = function() { console.log("WebSocket connection opened."); }; ws.onmessage = function(event) { console.log("Received message: " + event.data); }; ws.onclose = function() { console.log("WebSocket connection closed."); }; ws.onerror = function(event) { console.log("WebSocket error: " + event.data); }; 复制代码

在这个示例中,我们使用 JavaScript WebSocket API 创建了一个 WebSocket 连接,并打印连接状态和收到的消息。要测试这个 HTML 文件,我们可以使用任何支持 WebSocket 的浏览器来打开这个 HTML 文件,例如 Chrome 或 Firefox。当我们打开这个 HTML 文件时,它会自动连接到我们的 WebSocket 服务器,并显示连接状态和收到的消息。

除了使用浏览器的 JavaScript WebSocket API,我们还可以使用其他 WebSocket 客户端库,例如 Go 的 gorilla/websocket 包。以下是一个简单的 Go WebSocket 客户端示例:

goCopy code package main import ( "log" "github.com/gorilla/websocket" ) func main() { // 连接WebSocket服务器 conn, _, err := websocket.DefaultDialer.Dial("ws://localhost:8080/ws", nil) if err != nil { log.Fatal(err) } defer conn.Close() // 发送消息 err = conn.WriteMessage(websocket.TextMessage, []byte("Hello, world!")) if err != nil { log.Fatal(err) } // 读取消息 messageType, p, err := conn.ReadMessage() if err != nil { log.Fatal(err) } log.Println("Received message:", string(p)) } 复制代码

在这个示例中,我们使用 websocket.DefaultDialer.Dial 方法连接到我们的 WebSocket 服务器,并使用 conn.WriteMessage 方法发送消息。然后,我们使用 conn.ReadMessage 方法读取从服务器返回的响应消息。

这些示例展示了如何使用 Go 语言创建一个简单的 WebSocket 服务器和客户端。使用 WebSocket 协议可以实现高效、实时的双向通信,这在许多实时应用程序中非常有用,例如聊天应用程序、多人游戏和在线协作工具。

作者:吕政超



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有