go http升级为websocket举例

当使用 Go 语言编写 WebSocket 服务器时,可以使用 `net/http` 包来处理客户端的 HTTP 请求,并将其升级为 WebSocket 连接。以下是一个简单的示例代码:

```go
package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    CheckOrigin: func(r *http.Request) bool {
        // 允许所有的跨域请求
        return true
    },
}

func handleWebSocket(w http.ResponseWriter, r *http.Request) {
    // 将 HTTP 连接升级为 WebSocket 连接
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println("WebSocket upgrade failed:", err)
        return
    }

    // 在这里可以进行 WebSocket 连接的处理逻辑
    // 例如,接收和发送消息
    for {
        // 读取客户端发送的消息
        _, message, err := conn.ReadMessage()
        if err != nil {
            log.Println("Failed to read message:", err)
            break
        }

        // 处理接收到的消息
        log.Printf("Received message: %s", message)

        // 发送消息给客户端
        response := []byte("Hello, client!")
        err = conn.WriteMessage(websocket.TextMessage, response)
        if err != nil {
            log.Println("Failed to send message:", err)
            break
        }
    }

    // 关闭 WebSocket 连接
    conn.Close()
}

func main() {
    // 定义 WebSocket 路由
    http.HandleFunc("/ws", handleWebSocket)

    // 启动 HTTP 服务器
    fmt.Println("WebSocket server started on :8080")
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("Failed to start server:", err)
    }
}
```

在上面的示例中,我们使用了 `gorilla/websocket` 包,它提供了更方便的 WebSocket 功能。在 `handleWebSocket` 函数中,我们将 HTTP 连接升级为 WebSocket 连接,并在连接建立后进行消息的读取和发送。

要运行此示例,您需要在系统中安装 `gorilla/websocket` 包。可以使用以下命令进行安装:

```
go get github.com/gorilla/websocket
```

然后,运行 Go 程序:

```
go run main.go
```

此时,WebSocket 服务器将在本地的 8080 端口上运行。当客户端发起一个带有 `/ws` 路径的 HTTP 请求时,服务器将将其升级为 WebSocket 连接,并进行相应的处理逻辑。

相关推荐

  1. go http升级websocket举例

    2024-01-07 06:14:04       34 阅读
  2. fastjson升级fastjson2

    2024-01-07 06:14:04       19 阅读
  3. websocket 升级协议时的协议切换点

    2024-01-07 06:14:04       18 阅读
  4. Android App-targetSDKVersion28升级30

    2024-01-07 06:14:04       37 阅读
  5. mac升级 bigsur系统 bug

    2024-01-07 06:14:04       13 阅读
  6. WebSocket

    2024-01-07 06:14:04       42 阅读
  7. websocket

    2024-01-07 06:14:04       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-07 06:14:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-07 06:14:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-07 06:14:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-07 06:14:04       20 阅读

热门阅读

  1. 在 Vim 的配置文件中设置自动显示行号

    2024-01-07 06:14:04       31 阅读
  2. Android Compose——ScrollableTabRow和LazyColumn同步滑动

    2024-01-07 06:14:04       29 阅读
  3. A2DP Source如何从android系统拿到音频数据

    2024-01-07 06:14:04       33 阅读
  4. Docker Zookeeper 安装 简单教程

    2024-01-07 06:14:04       38 阅读
  5. 知名云计算项目实施体系资料合集

    2024-01-07 06:14:04       37 阅读
  6. Web前端篇——ElementUI的Backtop 不显示问题

    2024-01-07 06:14:04       38 阅读
  7. linux mv command and authority managemet

    2024-01-07 06:14:04       36 阅读
  8. 文心一言实战大全

    2024-01-07 06:14:04       36 阅读
  9. pyparamvalidate 重构背景和需求分析

    2024-01-07 06:14:04       36 阅读
  10. go 语言中的别名类型

    2024-01-07 06:14:04       38 阅读