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)
    }
}
相关推荐
庸俗今天不摸鱼7 分钟前
Canvas进阶-4、边界检测(流光,鼠标拖尾)
开发语言·前端·javascript·计算机外设
菠菠萝宝8 分钟前
【Java八股文】10-数据结构与算法面试篇
java·开发语言·面试·红黑树·跳表·排序·lru
奔跑吧邓邓子11 分钟前
【Python爬虫(36)】深挖多进程爬虫性能优化:从通信到负载均衡
开发语言·爬虫·python·性能优化·负载均衡·多进程
不会Hello World的小苗15 分钟前
Java——链表(LinkedList)
java·开发语言·链表
lsx20240627 分钟前
Perl 面向对象编程指南
开发语言
Allen Bright1 小时前
【Java基础-46.3】Java泛型通配符详解:解锁类型安全的灵活编程
java·开发语言
画个逗号给明天"1 小时前
C++STL容器之list
开发语言·c++
hrrrrb1 小时前
【Java】Java 常用核心类篇 —— 时间-日期API(上)
java·开发语言
小突突突1 小时前
模拟实现Java中的计时器
java·开发语言·后端·java-ee
七禾页话2 小时前
垃圾回收知识点
java·开发语言·jvm