真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語(yǔ)言聊天項(xiàng)目 golang 聊天室

go語(yǔ)言聊天室實(shí)現(xiàn)(二)gorilla/websocket中的聊天室示例

我們可以看到 gorilla/websocket中的examples中有一個(gè)聊天室的demo。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了蒙城免費(fèi)建站歡迎大家使用!

我們進(jìn)入該項(xiàng)目可以看到里面有這樣的一些內(nèi)容

按照官方的運(yùn)行方式來(lái)運(yùn)行這個(gè)項(xiàng)目

在瀏覽器中打開(kāi)8080端口,可以看到該項(xiàng)目可以被成功運(yùn)行了。

就是這樣一個(gè)簡(jiǎn)單的demo。

然后我們?nèi)タ匆幌滤木唧w實(shí)現(xiàn)。

在這個(gè)項(xiàng)目中首先定義了一個(gè)hub的結(jié)構(gòu)體:

這個(gè)結(jié)構(gòu)體中,clients代表所有已經(jīng)注冊(cè)的用戶(hù),broadcast管道會(huì)存儲(chǔ)客戶(hù)端發(fā)送來(lái)的信息。 register是一個(gè)*Client類(lèi)型的管道,用于存儲(chǔ)新注冊(cè)的用戶(hù),unregister管道反之。

我們打開(kāi)main.go,main函數(shù)的源碼為:

在這里首先會(huì)新開(kāi)一個(gè)goroutine,去跑hub的run方法,run方法中一個(gè)死循環(huán),不停地去輪詢(xún)hub中的內(nèi)容

如果取到了新用戶(hù),就加入到clients中,如果取到了信息,就循環(huán)所有的client,將信息寫(xiě)到client.send中。

我們看到在請(qǐng)求路徑為根的時(shí)候,它會(huì)請(qǐng)求一個(gè)函數(shù),而這個(gè)函數(shù)就是將home.html發(fā)送到客戶(hù)端。

而在請(qǐng)求路徑為“/ws”的時(shí)候,他會(huì)執(zhí)行一個(gè)serveWS的函數(shù)。

每當(dāng)一個(gè)新的用戶(hù)進(jìn)來(lái)之后,首先將連接升級(jí)為長(zhǎng)連接,然后將當(dāng)前的client寫(xiě)到register中,由hub.run函數(shù)去做處理。然后開(kāi)啟兩個(gè)goroutine,一個(gè)去讀client中發(fā)送來(lái)的數(shù)據(jù),一個(gè)將數(shù)據(jù)寫(xiě)入到所有的client中,去發(fā)送給用戶(hù)。

這就是整個(gè)聊天室的實(shí)現(xiàn)原理。

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í)。之前在這里直接寫(xiě)0,被告知需要傳一個(gè)time.Time類(lèi)型的數(shù)據(jù)。最終谷歌后才得到了這個(gè)值time.Time{}為"0001-01-01 00:00:00 +0000 UTC"。

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

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

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

Go語(yǔ)言的開(kāi)源項(xiàng)目

1.Docker項(xiàng)目

網(wǎng)址為 。

介紹:Docker是一種操作系統(tǒng)層面的虛擬化技術(shù),可以在操作系統(tǒng)和應(yīng)用程序之間進(jìn)行隔離,也可以稱(chēng)之為容器。Docker可以在一臺(tái)物理服務(wù)器上快速運(yùn)行一個(gè)或多個(gè)實(shí)例。例如,啟動(dòng)一個(gè)Cent OS操作系統(tǒng),并在其內(nèi)部命令行執(zhí)行指令后結(jié)束,整個(gè)過(guò)程就像自己在操作系統(tǒng)一樣高效。

2.golang項(xiàng)目

網(wǎng)址為 。

介紹:Go語(yǔ)言的早期源碼使用C語(yǔ)言和匯編語(yǔ)言寫(xiě)成。從Go 1.5版本自舉后,完全使用Go語(yǔ)言自身進(jìn)行編寫(xiě)。Go語(yǔ)言的源碼對(duì)了解Go語(yǔ)言的底層調(diào)度有極大的參考意義,建議希望對(duì)Go語(yǔ)言有深入了解的讀者讀一讀。

3.Kubernetes項(xiàng)目

網(wǎng)址為 。

介紹:Google公司開(kāi)發(fā)的構(gòu)建于Docker之上的容器調(diào)度服務(wù),用戶(hù)可以通過(guò)Kubernetes集群進(jìn)行云端容器集群管理。

4.etcd項(xiàng)目

網(wǎng)址為 。

介紹:一款分布式、可靠的KV存儲(chǔ)系統(tǒng),可以快速進(jìn)行云配置。

5.beego項(xiàng)目

網(wǎng)址為 。

介紹:beego是一個(gè)類(lèi)似Python的Tornado框架,采用了RESTFul的設(shè)計(jì)思路,使用Go語(yǔ)言編寫(xiě)的一個(gè)極輕量級(jí)、高可伸縮性和高性能的Web應(yīng)用框架。

6.martini項(xiàng)目

網(wǎng)址為 。

介紹:一款快速構(gòu)建模塊化的Web應(yīng)用的Web框架。

7.codis項(xiàng)目

網(wǎng)址為 Labs/codis。

介紹:國(guó)產(chǎn)的優(yōu)秀分布式Redis解決方案。

8.delve項(xiàng)目

網(wǎng)址為 。

介紹:Go語(yǔ)言強(qiáng)大的調(diào)試器,被很多集成環(huán)境和編輯器整合。

go語(yǔ)言聊天室實(shí)現(xiàn)(六)創(chuàng)建HTTP連接,并升級(jí)為長(zhǎng)連接

我們?cè)趍ian函數(shù)中,首先初始化配置文件,然后新建http連接。

這個(gè)連接創(chuàng)建之后,監(jiān)聽(tīng)服務(wù)器的9999端口。如果url的路徑后綴為 "/ws",就轉(zhuǎn)發(fā)到ws/ws.go中的IndexHandler方法中。

這個(gè)方法中首先我們創(chuàng)建一個(gè)websocket的Upgrader實(shí)例,然后我們使用Upgrader的upgrade方法來(lái)升級(jí)一下我們的連接為長(zhǎng)連接。

升級(jí)完成之后會(huì)返回一個(gè)*websocket.Conn的連接,我們之后所有的關(guān)于連接的操作,都是基于該conn的。

在該連接完成之后,我們將連接存放到一個(gè)名為Client的map中,以便之后管理更為方便。

之后,我們啟動(dòng)一個(gè)goroutine來(lái)讀取連接中發(fā)送的信息內(nèi)容,再根據(jù)內(nèi)容進(jìn)行相應(yīng)的操作。


網(wǎng)站欄目:go語(yǔ)言聊天項(xiàng)目 golang 聊天室
鏈接URL:http://weahome.cn/article/ddigooh.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部