go http升级为websocket举例

发布时间:2024年01月03日

当使用 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 连接,并进行相应的处理逻辑。

文章来源:https://blog.csdn.net/weixin_37841024/article/details/135374889
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。