【Go】使用Go语言创建WebSocket服务器和客户端
WebSocket 是一种新型的网络通信协议,可以在 Web 应用程序中实现双向通信。在这篇文章中,我们将介绍如何使用 Go 语言编写一个简单的 WebSocket 服务器。
首先,我们需要使用 Go 的 net/http
包创建一个 HTTP 服务器。在这个服务器中,我们将创建一个用于处理 WebSocket 连接的函数 handleWebSocket
。在该函数中,我们将使用 gorilla/websocket
包来处理 WebSocket 连接。
goCopy code package main import ( "log" "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, CheckOrigin: func(r *http.Request) bool { return true }, } func main() { // 创建HTTP服务器 http.HandleFunc("/ws", handleWebSocket) log.Println("Server started on :8080") log.Fatal(http.ListenAndServe(":8080", nil)) } func handleWebSocket(w http.ResponseWriter, r *http.Request) { // 升级HTTP连接为WebSocket连接 conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) return } defer conn.Close() // 处理WebSocket连接 for { // 读取消息 messageType, p, err := conn.ReadMessage() if err != nil { log.Println(err) return } log.Println("Received message:", string(p)) // 发送消息 err = conn.WriteMessage(messageType, []byte("Hello, world!")) if err != nil { log.Println(err) return } } }
在这个示例中,我们使用 gorilla/websocket
包创建了一个 WebSocket 服务器。我们创建了一个 upgrader
实例,并将其用于升级 HTTP 连接为 WebSocket 连接。然后,我们在 handleWebSocket
函数中处理 WebSocket 连接。在该函数中,我们使用 conn.ReadMessage
方法读取从客户端发送的消息,并使用 conn.WriteMessage
方法将消息发送回客户端。
要测试这个 WebSocket 服务器,我们可以使用任何 WebSocket 客户端。例如,我们可以使用浏览器的 JavaScript WebSocket API。以下是一个简单的 HTML 文件,使用 JavaScript WebSocket API 连接到我们的 WebSocket 服务器:
htmlCopy code <!DOCTYPE html> <html> <head> <title>WebSocket Test</title> </head> <body> <script> var ws = new WebSocket("ws://localhost:8080/ws"); ws.onopen = function() { console.log("WebSocket connection opened."); }; ws.onmessage = function(event) { console.log("Received message: " + event.data); }; ws.onclose = function() { console.log("WebSocket connection closed."); }; ws.onerror = function(event) { console.log("WebSocket error: " + event.data); }; </script> </body> </html>
在这个示例中,我们使用 JavaScript WebSocket API 创建了一个 WebSocket 连接,并打印连接状态和收到的消息。要测试这个 HTML 文件,我们可以使用任何支持 WebSocket 的浏览器来打开这个 HTML 文件,例如 Chrome 或 Firefox。当我们打开这个 HTML 文件时,它会自动连接到我们的 WebSocket 服务器,并显示连接状态和收到的消息。
除了使用浏览器的 JavaScript WebSocket API,我们还可以使用其他 WebSocket 客户端库,例如 Go 的 gorilla/websocket
包。以下是一个简单的 Go WebSocket 客户端示例:
goCopy code package main import ( "log" "github.com/gorilla/websocket" ) func main() { // 连接WebSocket服务器 conn, _, err := websocket.DefaultDialer.Dial("ws://localhost:8080/ws", nil) if err != nil { log.Fatal(err) } defer conn.Close() // 发送消息 err = conn.WriteMessage(websocket.TextMessage, []byte("Hello, world!")) if err != nil { log.Fatal(err) } // 读取消息 messageType, p, err := conn.ReadMessage() if err != nil { log.Fatal(err) } log.Println("Received message:", string(p)) }
在这个示例中,我们使用 websocket.DefaultDialer.Dial
方法连接到我们的 WebSocket 服务器,并使用 conn.WriteMessage
方法发送消息。然后,我们使用 conn.ReadMessage
方法读取从服务器返回的响应消息。
这些示例展示了如何使用 Go 语言创建一个简单的 WebSocket 服务器和客户端。使用 WebSocket 协议可以实现高效、实时的双向通信,这在许多实时应用程序中非常有用,例如聊天应用程序、多人游戏和在线协作工具。
猜你喜欢
- 【Go】Golang打包go项目部署到linux服务器正确方法
- 网上方法正确方法总结 网上方法我们可以在终端中输入以下代码:set CGO_ENABLED=0 set GOOS=linux set GOARCH=amd64 go build -o main-linux main.go然后就会生成main-linux的二进制可执行文件,然后我们就可以将main-linux放到服务器中的任一目录中,然后我们就可以执行以下命令运行。> chmod 777&nb
- 【Go】Go语言执行linux命令行
- ackage main /* Golang语言执行linux命令行 */ import ( "fmt" "io/ioutil" "os/exec" "time" ) func run() { cmd := exec.Command("/bin/bash", "-c",&n
- 【Go】VSCode配置Go语言开发库
- 1. Go插件配置安装好vscode后,打开插件页面,搜索Go相关插件,如图,选择第一个安装。插件安装完成后,点击设置图标,选择Extension Setting选项,进入插件设置页面。在插件设置选项中,选择待遇Edit in setting.json的选项,点击进入setting.json配置文件。将GOPATH和GOROOT配置到setting.json文件,如下图所示:配置完成后,就可以开始写go文件。2. Go开发语言包设置这时候vscode会提示未安装ygo语言包,根据右下角提示,点击
- 【Go】Go语言中的锁机制详解
- Go语言中的锁机制是一种用于并发编程的重要工具,通过锁机制可以保护共享资源,避免多个goroutine同时访问导致的数据竞争问题。在本文中,我们将深入探讨Go语言中的锁机制,包括sync包中提供的互斥锁和读写锁,以及如何使用它们来确保并发安全。同时,我们将通过具体的代码示例来演示锁机制的使用方法,帮助读者更好地理解和掌握这一关键概念。1. 互斥锁(Mutex)互斥锁(Mutex)是最常用的一种锁机制,用于保护临界区,确保在同一时刻只有一个goroutine可以访问共享资源。在Go语言中,sync
- 【Go】golang操作excel的高性能库——excelize/v2
- 目录介绍文档与源码安装快速开始创建 Excel 文档读取 Excel 文档打开数据流流式写入[相关 Excel 开源类库性能对比](https://xuri.me/excelize/zh-hans/performance.html)介绍Excelize是一个纯Go编写的库,提供了一组功能,允许你向XLAM / XLSM / XLSX / XLTM / XLTX文件写入和读取。支持读取和写入由Microsoft Excel™ 2007及更高版本生成的电子表格文档。通过高度兼容性支持复杂组件,并提供
- 【Go】利用Go语言实现高效的整除运算与余数计算
- 在编程中,整除运算和余数计算是常见的操作,特别在处理循环和数学运算时经常会用到。Go语言作为一种高效、简洁的编程语言,提供了丰富的内置函数和运算符,可以帮助我们实现高效的整除运算和余数计算。本文将介绍如何利用Go语言实现高效的整除运算和余数计算,并提供具体的代码示例。首先,我们来看一下Go语言中整除运算和余数计算的具体实现方式。在Go语言中,整除运算可以使用 "/" 运算符实现,余数计算可以使用 "%" 运算符实现。下面是一个简单的示例代码:package
- 【Go】golang能写桌面吗
- 本教程操作环境:windows10系统、go1.20.1版本、Dell G3电脑。Golang是一种编程语言,被广泛用于开发后端应用程序和网络服务。它以其强大的并发性能和简洁的语法而闻名,但是很多人问:Golang能否用于桌面应用程序的开发呢?答案是肯定的,Golang是完全可以用于桌面应用程序开发的。虽然它最初被设计用于构建服务器端应用程序,但由于其出色的性能和跨平台的特性,它也被广泛应用于桌面应用程序的开发。Golang提供了一组强大的标准库,其中包含用于图形界面和用户界面 (GUI) 开发
- 【Go】Go语言常用命令详解(二)
- 前言接着上一篇继续介绍Go语言的常用命令常用命令以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和管理依赖项等任务。命令描述go build编译Go程序包及其依赖项。go test运行包的测试。go run编译并运行Go程序。go clean删除编译生成的对象文件和缓存文件。go bug启动一个用于报告bug的工具。go doc显示有关包或符号的文档。go env打印有关Go环境的信息。go fix更新包以使用新的API。go fmt使用gofmt重新格式化Go包的源