返回顶部
首页 > 资讯 > 后端开发 > GO >Go语言实现websocket推送程序
  • 552
分享到

Go语言实现websocket推送程序

GowebsocketGowebsocket推送 2023-01-17 12:01:32 552人浏览 薄情痞子
摘要

目录一、场景抽象二、程序框架三、主要业务逻辑最近要在一个Go实现的K线服务器上追加一个websocket推送功能。 初步设想是在各品种每分钟的数据完成后立即向各订阅单位推送对应的K线

最近要在一个Go实现的K线服务器上追加一个websocket推送功能。

初步设想是在各品种每分钟的数据完成后立即向各订阅单位推送对应的K线数据。

一、场景抽象

1用户连接上服务器

2用户订阅某品种的某周期

3用户退订某品种某周期

4用户断开服务器

订阅:

推送:

二、程序框架

由于go语言不熟,幸好网上有人做了成熟的框架:GitHub - gorilla/WEBSocket: A fast, well-tested and widely used WebSocket implementation for Go.这个解决了怎样使用websocket的问题

三、主要业务逻辑

每个连接开两个线程

一个线程进行数据写入writePump,一个线程进行数据读取readPump,每当有客户端连接上服务器后,立即开启这两个线程。

读线程逻辑图:

写线程逻辑图:

程序启动时开一个总控线程func (h *Hub) Run()

此线程用来处理客户端的连接,断开,订阅和向订阅信息的客户端作相应信息的广播。

逻辑图如下:

处理注册

处理注册的逻辑非常简单,只是将客户端的指针放置于指针map中即可,代码如下:

// 注册,客户端连接上来的处理逻辑
func (h *Hub) reGISterMsg(client *Client) {
	h.clients[client] = true
}

处理注销

注销需要分两步走,首先把客户端指针集合中的对应指针删除,同时删除对应的发送通道。然后遍历内容订阅集合,删除对应的客户端指针的元素,最后,若发现某订阅内容上已经没有任何客户端指针,将其订阅内容一并删除。

程序逻辑如下:

订阅处理

订阅最主要的是订阅关系,我们可以用合约.周期作为key,使用客户端连接上来的指针集作为value,每当有用户订阅某内容时,将相应内容下面的指针集上加上对应此用户的指针即可,订阅关系如下:

推送处理

推送处理分两种类型,一种为用户订阅的数据推送给到他们,一种为心跳包推送给到30秒内没有数据推送或订阅动作的用户。

推送订阅的内容:当用户订阅的类型数据到达时,系统检查此订阅上的用户指针,将数据推送到对应指针的通道中,由各通道自行推送给各自的客户端。

推送心跳包:当某个连接上来的客户端30秒内没有订阅请求或是推送数据,系统将自动推送心跳包,以维持连接不被断开。

到此这篇关于Go语言实现websocket推送程序的文章就介绍到这了,更多相关Go websocket内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言实现websocket推送程序

本文链接: https://lsjlt.com/news/177979.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作