golang websocket 推送

发布时间:2024-07-03 07:19:17

Websocket 是一种在客户端和服务器之间实现双向通信的协议。而在 Golang 中,我们可以使用内置的 net/http 包和 gorilla/websocket 包来实现 websocket 的推送功能。本文将介绍如何使用 Golang 实现 websocket 推送,让开发者能够快速上手并运用于实际项目中。

准备工作

Golang 自带的 net/http 包已经提供了对 websocket 的支持,但使用起来相对底层。因此,我们可以借助第三方库 gorilla/websocket,它提供了更加简洁、易用的 API。首先,我们需要在项目中引入 gorilla/websocket 包:

go get github.com/gorilla/websocket

创建 WebSocket 服务器

要创建一个 WebSocket 服务器,我们需要定义一个 HTTP 请求处理函数,并通过 Upgrade 方法将 HTTP 连接升级为 WebSocket 连接。下面是一个简单的示例:

func wsHandler(w http.ResponseWriter, r *http.Request) {
    upgrader := websocket.Upgrader{
        CheckOrigin: func(r *http.Request) bool {
            return true
        },
    }

    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println("Failed to upgrade HTTP connection to WebSocket:", err)
        return
    }

    // 处理 WebSocket 连接
    for {
        messageType, message, err := conn.ReadMessage()
        if err != nil {
            log.Println("Failed to read message from WebSocket:", err)
            return
        }

        // 处理接收到的消息
        // ...

        // 发送消息到 WebSocket 客户端
        // ...
    }
}

客户端连接

在 Golang 中,我们可以使用 JavaScript 的 WebSocket 对象来创建 WebSocket 客户端,并与服务器建立连接。下面是一个简单的客户端示例:

const socket = new WebSocket("ws://example.com/ws")

// 连接成功事件
socket.onopen = function() {
    console.log("WebSocket connected")
}

// 接收消息事件
socket.onmessage = function(event) {
    const message = event.data;
    console.log("Received message:", message);
}

// 发送消息
socket.send("Hello, Server!")

发送消息到客户端

在 WebSocket 服务器中,我们可以使用 conn.WriteMessage 方法将消息发送到客户端。下面是一个发送消息的示例:

err := conn.WriteMessage(websocket.TextMessage, []byte("Hello, Client!"))
if err != nil {
    log.Println("Failed to send message to WebSocket client:", err)
}

实际项目中,我们可以根据业务需求,在适当的时机发送消息到客户端。

相关推荐