go 网络编程 websocket gorilla/websocket

在 Go 语言中,你可以使用标准库中的 net/http 包和第三方库 gorilla/websocket 来实现一个 WebSocket 服务器。gorilla/websocket 库提供了对 WebSocket 协议的高级抽象,使得处理 WebSocket 连接变得相对简单。

Go 复制代码
package main

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

    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    // 允许跨域请求,生产环境中请谨慎使用
    CheckOrigin: func(r *http.Request) bool {
       return true
    },
}

func handler(w http.ResponseWriter, r *http.Request) {
    // 升级 HTTP 请求到 WebSocket 连接
    ws, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
       log.Println("Error upgrading to WebSocket:", err)
       return
    }
    defer ws.Close()

    fmt.Println("Client connected")

    // 读取来自客户端的消息
    for {
       // 读取 WebSocket 连接的消息
       messageType, p, err := ws.ReadMessage()
       if err != nil {
          log.Println("Error reading message:", err)
          break
       }
       fmt.Printf("Received message: %s of type %d\n", p, messageType)

       // 发送消息回客户端
       err = ws.WriteMessage(messageType, p)
       if err != nil {
          log.Println("Error writing message:", err)
          break
       }
    }

    fmt.Println("Client disconnected")
}

func main() {
    http.HandleFunc("/ws", handler)

    // 启动 HTTP 服务器
    fmt.Println("Starting server on ws://localhost:8080/ws")
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
       log.Fatal("ListenAndServe: ", err)
    }
}
相关推荐
陈奕昆6 分钟前
五、【LLaMA-Factory实战】模型部署与监控:从实验室到生产的全链路实践
开发语言·人工智能·python·llama·大模型微调
明月看潮生17 分钟前
青少年编程与数学 02-019 Rust 编程基础 10课题、函数、闭包和迭代器
开发语言·青少年编程·rust·编程与数学
明月看潮生21 分钟前
青少年编程与数学 02-019 Rust 编程基础 09课题、流程控制
开发语言·算法·青少年编程·rust·编程与数学
川川籽24 分钟前
hashicorp/raft模块实现的raft集群存在节点跨集群身份冲突问题
golang·go-raft
程序猿小三27 分钟前
python uv的了解与使用
开发语言·python·uv
纯纯沙口27 分钟前
Qt—多线程基础
开发语言·qt
yxc_inspire30 分钟前
基于Qt的app开发第八天
开发语言·c++·qt
廖圣平31 分钟前
美团核销 第三方接口供应商 (含接口文档)
开发语言·数据库·php
sunsineq41 分钟前
[超级简单]讲解如何用PHP实现LINE Pay API!
开发语言·php·linepay
上海合宙LuatOS1 小时前
全栈工程师实战手册:LuatOS日志系统开发指南!
java·开发语言·单片机·嵌入式硬件·物联网·php·硬件工程