go語言聊天服務器搭建 go語言做服務器

go語言聊天室實現(七)websocket收消息設置

上一節中,我們為每個連接都創建了一個goroutine來讀取其中的消息,現在我們將這個讀取消息的方法實現一下。

創新互聯公司專業成都網站制作、成都網站建設、外貿營銷網站建設,集網站策劃、網站設計、網站制作于一體,網站seo、網站優化、網站營銷、軟文發布平臺等專業人才根據搜索規律編程設計,讓網站在運行后,在搜索中有好的表現,專業設計制作為您帶來效益的網站!讓網站建設為您創造效益。

我們在application目錄下新建controllers目錄,并在其中創建一個MessageController.go文件。

首先我們新建一個MessageController的結構體,內容如下

這個結構體包括兩個內容,一個是我們將連接放在數組之后,返回的索引,另一個是連接本身.

這個是具體的方法。

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

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

我們將用戶手法消息的內容定義為一個結構體,然后將用戶的訂閱信息的json通過json.unmarshal轉換成這個結構體。

之后的switch操作與我們在Swoole中的操作基本雷同,在查詢到login之后,調用service中 的login方法來進行注冊。

下一節中我們再介紹具體的注冊邏輯。

go語言聊天室實現(六)創建HTTP連接,并升級為長連接

我們在mian函數中,首先初始化配置文件,然后新建http連接。

這個連接創建之后,監聽服務器的9999端口。如果url的路徑后綴為 "/ws",就轉發到ws/ws.go中的IndexHandler方法中。

這個方法中首先我們創建一個websocket的Upgrader實例,然后我們使用Upgrader的upgrade方法來升級一下我們的連接為長連接。

升級完成之后會返回一個*websocket.Conn的連接,我們之后所有的關于連接的操作,都是基于該conn的。

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

之后,我們啟動一個goroutine來讀取連接中發送的信息內容,再根據內容進行相應的操作。

如何搭建go語言環境 linux

Go的三種安裝方式

Go有多種安裝方式,你可以選擇自己喜歡的。這里我們介紹三種最常見的安裝方式:

Go源碼安裝:這是一種標準的軟件安裝方式。對于經常使用Unix類系統的用戶,尤其對于開發者來說,從源碼安裝可以自己定制。

Go標準包安裝:Go提供了方便的安裝包,支持Windows、Linux、Mac等系統。這種方式適合快速安裝,可根據自己的系統位數下載好相應的安裝包,一路next就可以輕松安裝了。**推薦這種方式**

第三方工具安裝:目前有很多方便的第三方軟件包工具,例如Ubuntu的apt-get、Mac的homebrew等。這種安裝方式適合那些熟悉相應系統的用戶。

最后,如果你想在同一個系統中安裝多個版本的Go,你可以參考第三方工具GVM,這是目前在這方面做得最好的工具,除非你知道怎么處理。

Go源碼安裝

在Go的源代碼中,有些部分是用Plan 9 C和ATT匯編寫的,因此假如你要想從源碼安裝,就必須安裝C的編譯工具。

在Mac系統中,只要你安裝了Xcode,就已經包含了相應的編譯工具。

在類Unix系統中,需要安裝gcc等工具。例如Ubuntu系統可通過在終端中執行sudo apt-get install gcc

libc6-dev來安裝編譯工具。

在Windows系統中,你需要安裝MinGW,然后通過MinGW安裝gcc,并設置相應的環境變量。

你可以直接去官網下載源碼,找相應的goVERSION.src.tar.gz的文件下載,下載之后解壓縮到$HOME目錄,執行如下代碼:

cd go/src

./all.bash

運行all.bash后出現"ALL TESTS PASSED"字樣時才算安裝成功。

上面是Unix風格的命令,Windows下的安裝方式類似,只不過是運行all.bat,調用的編譯器是MinGW的gcc。

如果是Mac或者Unix用戶需要設置幾個環境變量,如果想重啟之后也能生效的話把下面的命令寫到.bashrc或者.zshrc里面,

export GOPATH=$HOME/gopath

export PATH=$PATH:$HOME/go/bin:$GOPATH/bin

如果你是寫入文件的,記得執行bash .bashrc或者bash

.zshrc使得設置立馬生效。

如果是window系統,就需要設置環境變量,在path里面增加相應的go所在的目錄,設置gopath變量。

當你設置完畢之后在命令行里面輸入go,看到如下圖片即說明你已經安裝成功

圖1.1 源碼安裝之后執行Go命令的圖

如果出現Go的Usage信息,那么說明Go已經安裝成功了;如果出現該命令不存在,那么可以檢查一下自己的PATH環境變中是否包含了Go的安裝目錄。

關于上面的GOPATH將在下面小節詳細講解

Go標準包安裝

Go提供了每個平臺打好包的一鍵安裝,這些包默認會安裝到如下目錄:/usr/local/go

(Windows系統:c:\Go),當然你可以改變他們的安裝位置,但是改變之后你必須在你的環境變量中設置如下信息:

export GOROOT=$HOME/go

export GOPATH=$HOME/gopath

export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

上面這些命令對于Mac和Unix用戶來說最好是寫入.bashrc或者.zshrc文件,對于windows用戶來說當然是寫入環境變量。

go語言聊天室實現(二)gorilla/websocket中的聊天室示例

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

我們進入該項目可以看到里面有這樣的一些內容

按照官方的運行方式來運行這個項目

在瀏覽器中打開8080端口,可以看到該項目可以被成功運行了。

就是這樣一個簡單的demo。

然后我們去看一下它的具體實現。

在這個項目中首先定義了一個hub的結構體:

這個結構體中,clients代表所有已經注冊的用戶,broadcast管道會存儲客戶端發送來的信息。 register是一個*Client類型的管道,用于存儲新注冊的用戶,unregister管道反之。

我們打開main.go,main函數的源碼為:

在這里首先會新開一個goroutine,去跑hub的run方法,run方法中一個死循環,不停地去輪詢hub中的內容

如果取到了新用戶,就加入到clients中,如果取到了信息,就循環所有的client,將信息寫到client.send中。

我們看到在請求路徑為根的時候,它會請求一個函數,而這個函數就是將home.html發送到客戶端。

而在請求路徑為“/ws”的時候,他會執行一個serveWS的函數。

每當一個新的用戶進來之后,首先將連接升級為長連接,然后將當前的client寫到register中,由hub.run函數去做處理。然后開啟兩個goroutine,一個去讀client中發送來的數據,一個將數據寫入到所有的client中,去發送給用戶。

這就是整個聊天室的實現原理。

本文題目:go語言聊天服務器搭建 go語言做服務器
文章轉載:http://m.kartarina.com/article16/dodsjdg.html

成都網站建設公司_創新互聯,為您提供動態網站、面包屑導航、服務器托管、品牌網站建設、、網站內鏈

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站建設
主站蜘蛛池模板: 亚洲熟妇av午夜无码不卡| 亚洲熟妇少妇任你躁在线观看无码| 精品无码久久久久国产动漫3d| 少妇无码一区二区二三区| 人妻aⅴ无码一区二区三区| 人妻在线无码一区二区三区| 中文字幕精品无码一区二区| 亚洲AV无码一区二区三区在线 | 久久人妻内射无码一区三区| 无码国产精品一区二区免费式影视| 亚洲Av综合色区无码专区桃色| 亚洲av无码成人精品区| 亚洲精品无码久久毛片波多野吉衣| 国产成人无码区免费A∨视频网站| 无码精品久久久久久人妻中字| 黑人巨大无码中文字幕无码| 午夜无码A级毛片免费视频| 国内精品久久人妻无码不卡| 日韩精品无码AV成人观看| 久久影院午夜理论片无码| 亚洲精品无码永久在线观看| 亚洲午夜无码久久| 久久午夜无码鲁丝片秋霞| 国产网红无码精品视频| 国产精品亚洲аv无码播放| 丰满亚洲大尺度无码无码专线 | 久久亚洲精品成人无码网站| 亚洲av无码成人精品区在线播放| 亚洲中文字幕无码久久| 久久精品无码一区二区WWW| 无码免费一区二区三区免费播放| 国精品无码A区一区二区| h无码动漫在线观看| 亚洲无码日韩精品第一页| 免费无码午夜福利片69| 亚洲国产精品无码AAA片| 亚洲精品无码永久中文字幕| 中文字幕无码日韩专区| 亚洲成无码人在线观看| 777爽死你无码免费看一二区| 无码精品视频一区二区三区|