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

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

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

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

在上面的示例中,我们首先创建了一个ginEngine实例,并创建了一个melodyMelody实例。

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

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

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

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

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

go get github.com/gin-gonic/gin
go get github.com/olahol/melody

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


http://www.kler.cn/news/108041.html

相关文章:

  • redirect导致的循环重定向问题(史上最全)
  • 使用反射调用类的私有内部类的私有方法
  • lvs+keepalived: 高可用集群
  • PHP 同城服务共享茶室小程序系统是如何实现的?
  • C语言二、八、十六进制转换
  • 【Apache Flink】实现有状态函数
  • 2023年马丁·加德纳聚会数学魔术分享之《不只是奇偶性的魔术》回顾
  • Android 13.0 根据包名授权悬浮窗权限
  • CSS宽度100%和宽度100vw之间有什么不同?
  • windows PC virtualBox 配置
  • 【计算机网络笔记】Web缓存/代理服务器技术
  • 用Visual Studio(VS)开发UNIX/Linux项目
  • excel巧用拼接函数CONCAT输出JSON、SQL字符串
  • Powershell脚本自动备份dhcp数据库
  • 僵尸网络|让人防不胜防的内部网络安全问题,作为企业IT不得不了解的基础安全
  • 酷开科技 | 酷开系统大屏电视,打造精彩家庭场景
  • Blueprints - 虚幻中的行为树(Behavior Tree)
  • 排序算法-堆积树排序法(HeapSort)
  • SQL企业微信群机器人消息推送
  • 关于数据中台的理解和思考
  • 实战经验分享FastAPI 是什么
  • Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(上)
  • react-antd组件 input输入框: 实现按回车搜索
  • 密码学与网络安全:量子计算的威胁与解决方案
  • 038-第三代软件开发-简易视频播放器-自定义Slider (二)
  • java后端返回数据给前端时去除值为空或NULL的属性、忽略某些属性
  • 聚观早报 |2024款飞凡R7官宣;小米14新配色材质
  • Spark新特性与核心概念
  • 网络(番外篇)can网络知识
  • VScode 调试 linux内核