欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go語(yǔ)言發(fā)送微信消息,go 語(yǔ)言 微服務(wù)

微信是用什么語(yǔ)言開發(fā)的

一般安卓手機(jī)的應(yīng)用軟件目前都是以Java為主的程序語(yǔ)言開發(fā)的,包括微信。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供鼓樓企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為鼓樓眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

不過(guò),Android的開發(fā)者Google準(zhǔn)備轉(zhuǎn)用go語(yǔ)言開發(fā)Android平臺(tái),自然,一旦成真,那么Android的各種應(yīng)用程序也會(huì)隨著轉(zhuǎn)到go語(yǔ)言的開發(fā)上來(lái)。

go語(yǔ)言聊天室實(shí)現(xiàn)(七)websocket收消息設(shè)置

上一節(jié)中,我們?yōu)槊總€(gè)連接都創(chuàng)建了一個(gè)goroutine來(lái)讀取其中的消息,現(xiàn)在我們將這個(gè)讀取消息的方法實(shí)現(xiàn)一下。

我們?cè)赼pplication目錄下新建controllers目錄,并在其中創(chuàng)建一個(gè)MessageController.go文件。

首先我們新建一個(gè)MessageController的結(jié)構(gòu)體,內(nèi)容如下

這個(gè)結(jié)構(gòu)體包括兩個(gè)內(nèi)容,一個(gè)是我們將連接放在數(shù)組之后,返回的索引,另一個(gè)是連接本身.

這個(gè)是具體的方法。

我們首先設(shè)置了一下讀消息的大小、超時(shí)時(shí)間以及超時(shí)后需要的操作。

超時(shí)時(shí)間如果設(shè)置為0,那么就是永不超時(shí)。之前在這里直接寫0,被告知需要傳一個(gè)time.Time類型的數(shù)據(jù)。最終谷歌后才得到了這個(gè)值time.Time{}為"0001-01-01 00:00:00 +0000 UTC"。

我們將用戶手法消息的內(nèi)容定義為一個(gè)結(jié)構(gòu)體,然后將用戶的訂閱信息的json通過(guò)json.unmarshal轉(zhuǎn)換成這個(gè)結(jié)構(gòu)體。

之后的switch操作與我們?cè)赟woole中的操作基本雷同,在查詢到login之后,調(diào)用service中 的login方法來(lái)進(jìn)行注冊(cè)。

下一節(jié)中我們?cè)俳榻B具體的注冊(cè)邏輯。

基于go的websocket消息推送的集群實(shí)現(xiàn)

目前websocket技術(shù)已經(jīng)很成熟,選型Go語(yǔ)言,當(dāng)然是為了節(jié)省成本以及它強(qiáng)大的高并發(fā)性能。我使用的是第三方開源的websocket庫(kù)即gorilla/websocket。

由于我們線上推送的量不小,推送后端需要部署多節(jié)點(diǎn)保持高可用,所以需要自己做集群,具體架構(gòu)方案如圖:

Auth Service:鑒權(quán)服務(wù),根據(jù)Token驗(yàn)證用戶權(quán)限。

Collect Service:消息采集服務(wù),負(fù)責(zé)收集業(yè)務(wù)系統(tǒng)消息,存入MongoDB后,發(fā)送給消息分發(fā)服務(wù)。

Dispatch Service:消息分發(fā)服務(wù),根據(jù)路由規(guī)則分發(fā)至對(duì)應(yīng)消息推送服務(wù)節(jié)點(diǎn)上。

Push Service:消息推送服務(wù),通過(guò)websocket將消息推送給用戶。

集群推送的關(guān)鍵點(diǎn)在于,web端與服務(wù)端建立長(zhǎng)連接之后,具體跟哪個(gè)推送節(jié)點(diǎn)保持長(zhǎng)連接的,如果我們能夠找到對(duì)應(yīng)的連接節(jié)點(diǎn),那么我們就可以將消息推送出去。下面講解一下集群的大致流程:

1. web端用戶登錄之后,帶上token與后端推送服務(wù)(Push Service)保持長(zhǎng)連接。

2. 推送服務(wù)收到連接請(qǐng)求之后,攜帶token去鑒權(quán)服務(wù)(Auth Service)驗(yàn)證此token權(quán)限,并返回用戶ID。

3. 把返回的用戶ID與長(zhǎng)連接存入本地緩存,保持用戶ID與長(zhǎng)連接綁定關(guān)系。

4. 再將用戶ID與本推送節(jié)點(diǎn)IP存入redis,建立用戶(即長(zhǎng)連接)與節(jié)點(diǎn)綁定關(guān)系,并設(shè)置失效時(shí)間。

5. 采集服務(wù)(Collect Service)收集業(yè)務(wù)消息,首先存入mongodb,然后將消息透?jìng)鹘o分發(fā)服務(wù)(Dispatch Service)。

6. 分發(fā)服務(wù)收到消息之后,根據(jù)消息體中的用戶ID,從redis中獲取對(duì)應(yīng)的推送服務(wù)節(jié)點(diǎn)IP,然后轉(zhuǎn)發(fā)給對(duì)應(yīng)的推送節(jié)點(diǎn)。

7. 推送服務(wù)節(jié)點(diǎn)收到消息之后,根據(jù)用戶ID,從本地緩存中取出對(duì)應(yīng)的長(zhǎng)連接,將消息推送給客戶端。

其他注意事項(xiàng):

go語(yǔ)言是什么

斗語(yǔ)言的話可以得罪人的,但是肯玩著玩的話不會(huì)產(chǎn)生矛盾,如果是他和你發(fā)生矛盾,你拿斗語(yǔ)言去對(duì)他說(shuō)的話,會(huì)產(chǎn)生很大的矛盾。

golang復(fù)用http.request.body

業(yè)務(wù)當(dāng)中有需要分發(fā)http.request.body的場(chǎng)景。比如微信回調(diào)消息只能指定一個(gè)地址,所以期望可以復(fù)制一份消息發(fā)給其他服務(wù)。由服務(wù)B和接收微信回調(diào)的服務(wù)A一起處理微信回調(diào)信息。

最開始考慮的是直接轉(zhuǎn)發(fā)http.request。使用 ReverseProxy 直接將http.request由服務(wù)A轉(zhuǎn)發(fā)給服務(wù)B。但是微信涉及到驗(yàn)證等問(wèn)題,完全調(diào)整好非常麻煩。所以轉(zhuǎn)換思路,打算將http.request.body的內(nèi)容直接post給服務(wù)B。

可是http.request是readcloser。我們將http.request readAll的時(shí)候講無(wú)法再次讀取http.request里面的信息。

其中c表示的是http的上下文

1.我們先將body從http.request里面讀取出來(lái),保存到一個(gè)變量里面。

2.然后再將變量里面的數(shù)據(jù)使用ioutil.NopCloser方法寫回到http.request里面。

NopCloser returns a ReadCloser with a no-op Close method wrapping the provided Reader r.

NopCloser用一個(gè)無(wú)操作的Close方法包裝Reader r返回一個(gè)ReadCloser接口。

這樣我們就可以再次使用c.request來(lái)進(jìn)行處理了。

golang復(fù)用http-request-body

go語(yǔ)言可以做什么

1、服務(wù)器編程:以前你如果使用C或者C++做的那些事情,用Go來(lái)做很合適,例如處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)等。

2、分布式系統(tǒng)、數(shù)據(jù)庫(kù)代理器、中間件:例如Etcd。

3、網(wǎng)絡(luò)編程:這一塊目前應(yīng)用最廣,包括Web應(yīng)用、API應(yīng)用、下載應(yīng)用,而且Go內(nèi)置的net/http包基本上把我們平常用到的網(wǎng)絡(luò)功能都實(shí)現(xiàn)了。

4、開發(fā)云平臺(tái):目前國(guó)外很多云平臺(tái)在采用Go開發(fā),我們所熟知的七牛云、華為云等等都有使用Go進(jìn)行開發(fā)并且開源的成型的產(chǎn)品。

5、區(qū)塊鏈:目前有一種說(shuō)法,技術(shù)從業(yè)人員把Go語(yǔ)言稱作為區(qū)塊鏈行業(yè)的開發(fā)語(yǔ)言。如果大家學(xué)習(xí)區(qū)塊鏈技術(shù)的話,就會(huì)發(fā)現(xiàn)現(xiàn)在有很多很多的區(qū)塊鏈的系統(tǒng)和應(yīng)用都是采用Go進(jìn)行開發(fā)的,比如ehtereum是目前知名度最大的公鏈,再比如fabric是目前最知名的聯(lián)盟鏈,兩者都有g(shù)o語(yǔ)言的版本,且go-ehtereum還是以太坊官方推薦的版本。

自1.0版發(fā)布以來(lái),go語(yǔ)言引起了眾多開發(fā)者的關(guān)注,并得到了廣泛的應(yīng)用。go語(yǔ)言簡(jiǎn)單、高效、并發(fā)的特點(diǎn)吸引了許多傳統(tǒng)的語(yǔ)言開發(fā)人員,其數(shù)量也在不斷增加。

使用 Go 語(yǔ)言開發(fā)的開源項(xiàng)目非常多。早期的 Go 語(yǔ)言開源項(xiàng)目只是通過(guò) Go 語(yǔ)言與傳統(tǒng)項(xiàng)目進(jìn)行C語(yǔ)言庫(kù)綁定實(shí)現(xiàn),例如 Qt、Sqlite 等。

后期的很多項(xiàng)目都使用 Go 語(yǔ)言進(jìn)行重新原生實(shí)現(xiàn),這個(gè)過(guò)程相對(duì)于其他語(yǔ)言要簡(jiǎn)單一些,這也促成了大量使用 Go 語(yǔ)言原生開發(fā)項(xiàng)目的出現(xiàn)。

分享名稱:go語(yǔ)言發(fā)送微信消息,go 語(yǔ)言 微服務(wù)
文章網(wǎng)址:http://chinadenli.net/article35/dseissi.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航品牌網(wǎng)站制作App開發(fā)標(biāo)簽優(yōu)化關(guān)鍵詞優(yōu)化小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)