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

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

相关文章:

  • Ollama 安装
  • 【CI/CD】Jenkinsfile管理+参数化构建+邮件通知以及Jenkins + SonarQube 代码审查
  • 基于LM Arena 的 LLM 基准测试排行榜:DeepSeek-R1 排名第 5
  • Spring AI如何调用Function Calling
  • vue 学习-vite api.js
  • 给老系统做个安全检查——Burp SqlMap扫描注入漏洞
  • day56 第十一章:图论part06
  • 3. MySQL 用户与权限管理,角色管理(详细说明操作配置)
  • 【JavaEE进阶】MyBatis之动态SQL
  • 学习threejs,使用MeshBasicMaterial基本网格材质
  • 宝塔怎么搭建LiveHelperChat?PHP开源在线客服安装教程
  • Java 循环语句
  • AWS - Redshift - 外部表读取 Parquet 文件中 timestamp 类型的数据
  • Java多线程三:补充知识
  • ncDLRES:一种基于动态LSTM和ResNet的非编码RNA家族预测新方法
  • OpenBayes 教程上新丨语音合成/音乐合成/声音克隆,Step-Audio-TTS 让石矶娘娘秒变川渝辣妹
  • 线程与进程的深入解析及 Linux 线程编程
  • 【JavaScript进阶】作用域解构箭头函数
  • Python连接MySQL数据库完全指南
  • Vue前端开发-Vant之Layout组件
  • 如何申请网上商城/青岛设计优化公司
  • 网站建站如何做seo/关键字查找
  • wordpress视频网站模板下载/上海推广网站
  • 苏州市网站优化/知乎seo排名的搜软件
  • 企业免费邮箱/seo百科
  • 品牌高端网站制作/新手怎么学做电商