logo小熊博客
首页 代码速查表 fk标记语言示例 登录
目录
go中长连接和短连接

什么是长连接和短连接?

短连接(Short Connections)

短连接是指客户端与服务器之间的连接在完成一次请求-响应后即被关闭的方式。每次需要通信时,客户端都会重新建立一个新的连接。

特点

  • 连接时间短:每次请求完成后立即关闭连接。
  • 资源消耗低:由于连接时间短,服务器资源释放快。
  • 适用场景:适用于请求频率较低或对实时性要求不高的应用。

长连接(Long Connections)

长连接指客户端与服务器之间的连接在完成一次请求-响应后不会立即关闭,而是保持连接状态,以便后续的通信可以复用同一个连接。

特点

  • 连接时间长:连接在多个请求-响应之间保持开放状态。
  • 资源消耗较高:需要维持连接的状态,可能占用更多服务器资源。
  • 适用场景:适用于需要频繁通信或实时性要求较高的应用,如聊天应用、实时数据推送等。

在Go中实现长连接和短连接

实现短连接

使用Go的net/http包,可以轻松实现一个处理短连接的HTTP服务器。默认情况下,HTTP服务器使用短连接,除非客户端和服务器协商使用持久连接(Keep-Alive)。

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "这是一个短连接响应")
}

func main() {
    http.HandleFunc("/", handler)
    fmt.Println("短连接服务器运行在端口8080")
    http.ListenAndServe(":8080", nil)
}

实现长连接

WebSocket是一种在单个TCP连接上进行全双工通信的协议,非常适合实现实时应用,如聊天系统、实时数据推送等。

服务端代码

package main

import (
    "fmt"
    "net/http"

    "github.com/gorilla/websocket"
)

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

func wsHandler(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        fmt.Println("升级为WebSocket失败:", err)
        return
    }
    defer conn.Close()

    for {
        messageType, message, err := conn.ReadMessage()
        if err != nil {
            fmt.Println("读取消息失败:", err)
            break
        }
        fmt.Printf("收到消息: %sn", message)
        // 回显消息
        if err := conn.WriteMessage(messageType, message); err != nil {
            fmt.Println("发送消息失败:", err)
            break
        }
    }
}

func main() {
    http.HandleFunc("/ws", wsHandler)
    fmt.Println("WebSocket服务器运行在端口8080")
    http.ListenAndServe(":8080", nil)
}

使用JavaScript连接WebSocket

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket 测试</title>
</head>
<body>
    <script>
        const ws = new WebSocket("ws://localhost:8080/ws");

        ws.onopen = () => {
            console.log("WebSocket 连接已打开");
            ws.send("Hello, 服务器!");
        };

        ws.onmessage = (event) => {
            console.log("收到服务器消息:", event.data);
        };

        ws.onclose = () => {
            console.log("WebSocket 连接已关闭");
        };
    </script>
</body>
</html>

说明

  • 服务器通过Gorilla WebSocket库升级HTTP连接为WebSocket连接。
  • 建立连接后,客户端和服务器可以在同一个连接上进行双向通信。
  • 适用于需要实时数据传输的应用场景。
上一篇:项目依赖版本
下一篇:绑定语法和差值语法区别
请我喝奶茶!
赞赏码
手机扫码访问
手机访问