最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言實(shí)現(xiàn)websocket推送程序

 更新時(shí)間:2023年05月18日 17:30:41   作者:永遠(yuǎn)的麥田  
這篇文章主要介紹了Go語言實(shí)現(xiàn)websocket推送程序,WebSocket是基于TCP的一個(gè)雙向傳輸數(shù)據(jù)的協(xié)議,和HTTP協(xié)議一樣,是在應(yīng)用層的,他的出現(xiàn),是為了解決網(wǎng)頁進(jìn)行持久雙向傳輸數(shù)據(jù)的問題

最近要在一個(gè)go實(shí)現(xiàn)的K線服務(wù)器上追加一個(gè)websocket推送功能。

初步設(shè)想是在各品種每分鐘的數(shù)據(jù)完成后立即向各訂閱單位推送對應(yīng)的K線數(shù)據(jù)。

一、場景抽象

1用戶連接上服務(wù)器

2用戶訂閱某品種的某周期

3用戶退訂某品種某周期

4用戶斷開服務(wù)器

訂閱:

推送:

二、程序框架

由于go語言不熟,幸好網(wǎng)上有人做了成熟的框架:GitHub - gorilla/websocket: A fast, well-tested and widely used WebSocket implementation for Go.這個(gè)解決了怎樣使用websocket的問題

三、主要業(yè)務(wù)邏輯

每個(gè)連接開兩個(gè)線程

一個(gè)線程進(jìn)行數(shù)據(jù)寫入writePump,一個(gè)線程進(jìn)行數(shù)據(jù)讀取readPump,每當(dāng)有客戶端連接上服務(wù)器后,立即開啟這兩個(gè)線程。

讀線程邏輯圖:

寫線程邏輯圖:

程序啟動(dòng)時(shí)開一個(gè)總控線程func (h *Hub) Run()

此線程用來處理客戶端的連接,斷開,訂閱和向訂閱信息的客戶端作相應(yīng)信息的廣播。

邏輯圖如下:

處理注冊

處理注冊的邏輯非常簡單,只是將客戶端的指針放置于指針map中即可,代碼如下:

// 注冊,客戶端連接上來的處理邏輯
func (h *Hub) registerMsg(client *Client) {
	h.clients[client] = true
}

處理注銷

注銷需要分兩步走,首先把客戶端指針集合中的對應(yīng)指針刪除,同時(shí)刪除對應(yīng)的發(fā)送通道。然后遍歷內(nèi)容訂閱集合,刪除對應(yīng)的客戶端指針的元素,最后,若發(fā)現(xiàn)某訂閱內(nèi)容上已經(jīng)沒有任何客戶端指針,將其訂閱內(nèi)容一并刪除。

程序邏輯如下:

訂閱處理

訂閱最主要的是訂閱關(guān)系,我們可以用合約.周期作為key,使用客戶端連接上來的指針集作為value,每當(dāng)有用戶訂閱某內(nèi)容時(shí),將相應(yīng)內(nèi)容下面的指針集上加上對應(yīng)此用戶的指針即可,訂閱關(guān)系如下:

推送處理

推送處理分兩種類型,一種為用戶訂閱的數(shù)據(jù)推送給到他們,一種為心跳包推送給到30秒內(nèi)沒有數(shù)據(jù)推送或訂閱動(dòng)作的用戶。

推送訂閱的內(nèi)容:當(dāng)用戶訂閱的類型數(shù)據(jù)到達(dá)時(shí),系統(tǒng)檢查此訂閱上的用戶指針,將數(shù)據(jù)推送到對應(yīng)指針的通道中,由各通道自行推送給各自的客戶端。

推送心跳包:當(dāng)某個(gè)連接上來的客戶端30秒內(nèi)沒有訂閱請求或是推送數(shù)據(jù),系統(tǒng)將自動(dòng)推送心跳包,以維持連接不被斷開。

到此這篇關(guān)于Go語言實(shí)現(xiàn)websocket推送程序的文章就介紹到這了,更多相關(guān)Go websocket內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 手把手帶你走進(jìn)Go語言之語法基礎(chǔ)解析

    手把手帶你走進(jìn)Go語言之語法基礎(chǔ)解析

    這篇文章主要介紹了手把手帶你走進(jìn)Go語言之語法基礎(chǔ),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 詳解go-zero是如何做路由管理的

    詳解go-zero是如何做路由管理的

    go-zero 是一個(gè)微服務(wù)框架,包含了 web 和 rpc 兩大部分,而對于 web 框架來說,路由管理是必不可少的一部分,那么本文就來探討一下 go-zero 的路由管理是怎么做的吧
    2023-08-08
  • Golang編寫自定義IP限流中間件的方法詳解

    Golang編寫自定義IP限流中間件的方法詳解

    這篇文章給大家詳細(xì)的介紹了Golang編寫自定義IP限流中間件的方法,文章通過代碼實(shí)例介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09
  • Go語言fmt庫詳解與應(yīng)用實(shí)例(格式化輸入輸出功能)

    Go語言fmt庫詳解與應(yīng)用實(shí)例(格式化輸入輸出功能)

    fmt庫是Go語言中一個(gè)強(qiáng)大而靈活的庫,提供了豐富的格式化輸入輸出功能,通過本文的介紹和實(shí)例演示,相信你對fmt庫的使用有了更深的理解,感興趣的朋友一起看看吧
    2023-10-10
  • Go中的關(guān)鍵字any interface是否會(huì)成為歷史

    Go中的關(guān)鍵字any interface是否會(huì)成為歷史

    這篇文章主要為大家介紹了Go中的關(guān)鍵字any interface是否會(huì)成為歷史的講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • golang?metrics各個(gè)指標(biāo)含義講解說明

    golang?metrics各個(gè)指標(biāo)含義講解說明

    這篇文章主要為大家介紹了golang?metrics各個(gè)指標(biāo)含義講解說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 聊聊Golang性能分析工具pprof的使用

    聊聊Golang性能分析工具pprof的使用

    對于線上穩(wěn)定運(yùn)行的服務(wù)來說,?可能會(huì)遇到?cpu、mem?利用率升高的問題,那我們就需要使用?pprof?工具來進(jìn)行性能分析,所以本文就來和大家講講pprof的具體使用吧
    2023-05-05
  • 詳解如何使用pprof簡單檢測和修復(fù)Go語言中的內(nèi)存泄漏

    詳解如何使用pprof簡單檢測和修復(fù)Go語言中的內(nèi)存泄漏

    雖然?Go?有自動(dòng)垃圾回收(GC),它能回收不再被使用的內(nèi)存,但這并不意味著?Go?程序中不會(huì)發(fā)生內(nèi)存泄漏,下面我們就來看看如何使用pprof進(jìn)行檢測和修復(fù)Go語言中的內(nèi)存泄漏吧
    2025-01-01
  • 使用go語言解析xml的實(shí)現(xiàn)方法(必看篇)

    使用go語言解析xml的實(shí)現(xiàn)方法(必看篇)

    下面小編就為大家?guī)硪黄褂胓o語言解析xml的實(shí)現(xiàn)方法(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • Goland支持泛型了(上機(jī)實(shí)操)

    Goland支持泛型了(上機(jī)實(shí)操)

    Go的泛型不是還在設(shè)計(jì)草圖嗎?最樂觀估計(jì)也要2021年8月份。你說Go語言現(xiàn)在都沒開發(fā)好泛型,你支持這個(gè)特性有什么用呢?感興趣的朋友跟隨小編一起看看吧
    2020-12-12

最新評論

姜堰市| 台江县| 罗田县| 成都市| 清徐县| 平罗县| 潜江市| 浪卡子县| 余姚市| 岑巩县| 临安市| 菏泽市| 太康县| 江津市| 连江县| 宝应县| 印江| 尚义县| 白河县| 凌云县| 民权县| 太和县| 沙雅县| 古丈县| 湘潭市| 定远县| 军事| 邮箱| 靖西县| 林口县| 丽江市| 延津县| 福建省| 三江| 开平市| 达拉特旗| 盐边县| 昔阳县| 乐业县| 托里县| 恩平市|