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

本文介绍了如何使用Go语言和gorilla/websocket包创建一个简单的WebSocket服务器,包括设置HTTP服务器、升级HTTP连接以及处理WebSocket消息的读写。此外,还提供了JavaScript和Go客户端的示例,展示如何与WebSocket服务器进行交互。
摘要由CSDN通过智能技术生成

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
<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Test</title>
</head>
<body>
    <script>
        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);
        };
    </script>
</body>
</html>

在这个示例中,我们使用 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 协议可以实现高效、实时的双向通信,这在许多实时应用程序中非常有用,例如聊天应用程序、多人游戏和在线协作工具。

作者:吕政超

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中亿丰数字科技集团有限公司

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值