golang中快速用melody搭建轻量的websocket服务

在Go中,可以使用gin和melody库来搭建一个轻量级的WebSocket服务。gin是一个流行的Web框架,而melody是一个用于处理WebSocket的库。以下是一个简单的示例代码,演示了如何使用gin和melody搭建WebSocket服务:

go 复制代码
package main

import (
	"fmt"
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/olahol/melody"
)

func main() {
	r := gin.Default()

	// 创建Melody实例
	m := melody.New()

	// 注册WebSocket处理函数
	r.GET("/ws", func(c *gin.Context) {
		err := m.HandleRequest(c.Writer, c.Request)
		if err != nil {
			fmt.Println(err)
		}
	})

	// 处理WebSocket连接
	m.HandleConnect(func(s *melody.Session) {
		fmt.Println("WebSocket connected")
	})

	// 处理WebSocket消息
	m.HandleMessage(func(s *melody.Session, msg []byte) {
		fmt.Println("Received message:", string(msg))

		// 发送消息给所有连接的客户端
		m.Broadcast(msg)
	})

	// 处理WebSocket断开连接
	m.HandleDisconnect(func(s *melody.Session) {
		fmt.Println("WebSocket disconnected")
	})

	// 启动HTTP服务器
	fmt.Println("WebSocket server listening on :8080")
	http.ListenAndServe(":8080", r)
}

在上面的示例中,我们首先创建了一个gin的Engine实例,并创建了一个melody的Melody实例。

然后,我们使用r.GET方法将/ws路径注册为WebSocket处理函数。在处理函数中,我们使用m.HandleRequest方法来处理WebSocket连接。

接下来,我们使用m.HandleConnect方法处理WebSocket连接事件,使用m.HandleMessage方法处理WebSocket消息事件,使用m.HandleDisconnect方法处理WebSocket断开连接事件。

在HandleMessage方法中,我们打印接收到的消息,并使用m.Broadcast方法将消息广播给所有连接的客户端。

最后,我们使用http.ListenAndServe函数启动HTTP服务器,监听在8080端口上。

melody官网的示例代码

go 复制代码
package main

import (
	"github.com/gin-gonic/gin"
	"github.com/olahol/melody"
	"net/http"
)

func main() {
	r := gin.Default()
	m := melody.New()

	r.GET("/", func(c *gin.Context) {
		http.ServeFile(c.Writer, c.Request, "index.html")
	})

	r.GET("/ws", func(c *gin.Context) {
		m.HandleRequest(c.Writer, c.Request)
	})

	m.HandleMessage(func(s *melody.Session, msg []byte) {
		m.Broadcast(msg)
	})

	r.Run(":5000")
}

请注意,上述示例中使用了gin和melody库,你需要在项目中导入这两个库,可以使用以下命令进行安装:

复制代码
go get github.com/gin-gonic/gin
go get github.com/olahol/melody

以上是一个简单的示例,你可以根据具体的需求进行调整和扩展。

相关推荐
Dovis(誓平步青云)5 分钟前
拖动关键帧角色就抽动,动画编辑器怎样补齐中间状态
开发语言·前端·javascript·机器学习·编辑器
行走的陀螺仪9 分钟前
Claude Code 从入门到实战(二):Bash工具、Plan模式与后台任务
开发语言·bash
努力努力再努力wz14 分钟前
【Lua 入门系列】从执行模型到事件驱动:一文理解 Lua 有栈协程、挂起恢复与协作式调度
开发语言·lua
椒颜皮皮虾྅32 分钟前
一套 C# 接口,解锁四类视觉任务:DeploySharp 分类、分割、关键点与旋转框实战
开发语言·分类·c#
2603_965896621 小时前
JavaScript 原型与原型链
开发语言·前端·javascript
朋友圈自动点赞工具1 小时前
Ruby方法查找:对象不存方法
开发语言·前端·ruby·科技资讯
D e re k ZH1 小时前
C++ 模板与泛型编程进阶(No 2)
开发语言·c++
一级新生1 小时前
LLM _ Agent _ Skill _ 专家 的关系与选型笔记
java·开发语言·人工智能·笔记·大模型·智能体·skill
starzy19901 小时前
Scala String操作:从插值器到正则的完整指南
开发语言·后端·scala
普通人61 小时前
CSS-box-sizing-使用指南
开发语言·前端·css·1024程序员节