由于工作的契機,最近學(xué)習(xí)了下Gossip,以及go語言的實現(xiàn)版本HashiCorp/memberlist。網(wǎng)上有個最基本的memberlist使用的example,在下邊的鏈接中,感興趣可以按照文檔運行下感受感受。本文主要講解memberlist v0.1.5 的使用細節(jié)。
在硚口等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需定制,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,全網(wǎng)營銷推廣,外貿(mào)營銷網(wǎng)站建設(shè),硚口網(wǎng)站建設(shè)費用合理。
Gossip是最終一致性協(xié)議,是目前性能最好,容錯性最好的分布式協(xié)議。目前Prometheus的告警組件alertmanager、redis、s3、區(qū)塊鏈等項目都有使用Gossip。本文不介紹Gossip原理,大家自行谷歌。
簡單的幾步即可搭建gossip集群
感謝已經(jīng)有網(wǎng)友為我們實現(xiàn)了一個example(
)。
哪里有問題,還請大家多多指正
我們可以看到 gorilla/websocket中的examples中有一個聊天室的demo。
我們進入該項目可以看到里面有這樣的一些內(nèi)容
按照官方的運行方式來運行這個項目
在瀏覽器中打開8080端口,可以看到該項目可以被成功運行了。
就是這樣一個簡單的demo。
然后我們?nèi)タ匆幌滤木唧w實現(xiàn)。
在這個項目中首先定義了一個hub的結(jié)構(gòu)體:
這個結(jié)構(gòu)體中,clients代表所有已經(jīng)注冊的用戶,broadcast管道會存儲客戶端發(fā)送來的信息。 register是一個*Client類型的管道,用于存儲新注冊的用戶,unregister管道反之。
我們打開main.go,main函數(shù)的源碼為:
在這里首先會新開一個goroutine,去跑hub的run方法,run方法中一個死循環(huán),不停地去輪詢hub中的內(nèi)容
如果取到了新用戶,就加入到clients中,如果取到了信息,就循環(huán)所有的client,將信息寫到client.send中。
我們看到在請求路徑為根的時候,它會請求一個函數(shù),而這個函數(shù)就是將home.html發(fā)送到客戶端。
而在請求路徑為“/ws”的時候,他會執(zhí)行一個serveWS的函數(shù)。
每當(dāng)一個新的用戶進來之后,首先將連接升級為長連接,然后將當(dāng)前的client寫到register中,由hub.run函數(shù)去做處理。然后開啟兩個goroutine,一個去讀client中發(fā)送來的數(shù)據(jù),一個將數(shù)據(jù)寫入到所有的client中,去發(fā)送給用戶。
這就是整個聊天室的實現(xiàn)原理。
用于在開發(fā)階段,服務(wù)端接口沒有正式完成之前,模擬接口請求,便于客戶端測試。
建立一個文件夾(Config),放置所有的接口文件
將接口按如下json格式存儲到成文件,一個接口對應(yīng)一個文件
如登錄接口:./Config/login.json
定義接口
讀取所有的接口配置文件
新聞名稱:關(guān)于go語言實現(xiàn)即時通訊的信息
分享URL:http://jinyejixie.com/article32/dosgdsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、外貿(mào)建站、網(wǎng)站維護、軟件開發(fā)、虛擬主機、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)