当前位置: 首页 > article >正文

go 网络编程 websocket gorilla/websocket

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

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)
    }
}


http://www.kler.cn/a/556497.html

相关文章:

  • python网络安全怎么学 python做网络安全
  • 视觉应用工程师(面试)
  • C语言之宏定义
  • 在低功耗MCU上实现人工智能和机器学习
  • DeepSeek 点燃关键技术突破的科技引擎,驶向未来新航道
  • 电商搜索API的Elasticsearch优化策略
  • CSS 布局技术深度解析:从传统到现代的核心布局方案
  • 猿大师播放器:网页播放RTSP H.265零转码革命延迟低更流畅智慧安防首选
  • 华为昇腾服务器固件Firmware、驱动Drive、CANN各自的作用与联系?
  • 大模型产品Deepseek(八)、数据嵌入+知识库管理+联网搜索,实现精准的知识查询
  • 回溯算法:非递减子序列子集,这题的去重并不是通解!!!!
  • Spring 核心技术解析【纯干货版】- XIV:Spring 消息模块 Spring-Jms 模块精讲
  • 如何恢复苹果手机置出厂设置
  • 新版Tomcat MySQL IDEA 安装配置过程遇到的问题
  • C#上位机--选择语句(switch)
  • Golang | 每日一练 (3)
  • 基于深度学习与知识图谱的设备智能维护系统KGPHMAgent
  • qt QDockWidget总结
  • 耀世16Pro鼠标卡顿
  • 【数据库系统概论】第第12章 并发控制