go 网络编程 websocket gorilla/websocket

server/2025/2/23 18:17:15/

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

package mainimport ("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.ppmy.cn/server/170178.html

相关文章

ip属地是电话号码吗怎么改

在数字化时代,IP属地作为网络身份的一部分,对于许多互联网用户来说并不陌生。然而,关于IP属地的具体含义以及如何更改它,却常常让一些用户感到困惑。特别是当提到IP属地与电话号码之间的关系时,更是容易让人产生误解。…

虚拟环境下Python调用C++开发的dll如何联调?一文解答!(Python开发环境PyCharm,C++开发环境Visual Studio)

开发环境 Python: PyCharm C: Visual Studio 2022 (Enterprise) 更多信息 Python中使用三方库ctypes作为C接口与Python之间的桥梁 dll中向外暴露C接口供Python调用 PyCharm 中的相关操作 对于调用某 dll的C接口位置代码行处打上断点,并开始调试,运行到要…

力扣LeetCode: 2506 统计相似字符串对的数目

题目: 给你一个下标从 0 开始的字符串数组 words 。 如果两个字符串由相同的字符组成,则认为这两个字符串 相似 。 例如,"abca" 和 "cba" 相似,因为它们都由字符 a、b、c 组成。然而,"aba…

AMBA-CHI协议详解(十八)

AMBA-CHI协议详解(一)- Introduction AMBA-CHI协议详解(二)- Channel fields / Read transactions AMBA-CHI协议详解(三)- Write transactions AMBA-CHI协议详解(四)- Other transac…

微信小程序-二维码绘制

wxml <view bindlongtap"saveQrcode"><!-- 二维码 --><view style"position: absolute;background-color: #FFFAEC;width: 100%;height: 100vh;"><canvas canvas-id"myQrcode" style"width: 200px; height: 200px;ba…

源码方式安装llama.cpp及调试

llama.cpp源码方式安装和调试配置 构建和编译 注意这里是cuda&#xff0c;且要开启debug模式 cmake -B build -DGGML_CUDAON -DCMAKE_BUILD_TYPEDebug cmake --build build --config Debug正在编译&#xff1a; 配置launch.json用于调式&#xff1a; 要根据自己的环境路径…

Vue.js 与 Ajax(Axios)的深入探索

Vue.js 与 Ajax(Axios)的深入探索 引言 在当前的前端开发领域,Vue.js 已经成为了最受欢迎的 JavaScript 框架之一。它以其简洁的语法、高效的性能和强大的生态系统获得了广泛的应用。而在与后端服务交互时,Ajax 技术是不可或缺的。本文将深入探讨 Vue.js 与 Ajax(Axios)…

AWS-SAA中文版题库

一家公司收集多大洲城市的温度、湿度和大气压数据。该公司每天从每个站点收集的平均数据量为500GB。每个站点都有高速互联网连接。该公司希望尽快将所有这些全球站点的数据聚合到一个AmazonS3存储桶中。解决方案必须将操作复杂性降至最低。哪种解决方案满足这些要求&#xff1f…