您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么用go實現多人聊天室”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
項目展示
我們可以到github上把項目克隆到本地,然后輸入如下命令:
這里需要注意一下安裝bee工具時可能會出現問題,這里需要進行測試,在終端輸入bee,如果出現下圖所示,則沒有問題,如果沒有的話,則安裝bee工具出錯,可以看我的這篇博客(https://blog.csdn.net/qq_39397165/article/details/106406773)進行安裝。
安裝好環境后,我們就可以進行運行項目,終端下輸入bee run即可運行項目,運行成功如下圖所示:
打開瀏覽器輸入localhost:8080,可以看到如下界面:
沒有賬號我們可以先進行注冊,點擊注冊按鈕,可以進入注冊界面,輸入相關信息即可完成注冊。
之后輸入手機號和密碼就可以進入聊天室了,兩個人就可以在聊天室進行聊天了,截圖如下:
我們可以看到聊天記錄中進行了詳細介紹,就是這樣一個簡單項目,可以快速熟悉beego框架。下面對一些知識點進行介紹。
WebSocket
既然要做聊天室,我們就要是實時通訊的,這里可選擇方案有很多:
輪詢:客戶端以一定的時間間隔發送Ajax請求,這種方式實現起來簡單,但是消耗帶寬和服務器資源,需要頻繁建立和釋放TCP連接。
長輪詢:與普通輪詢不一樣,服務端在收到請求后會保持住不立即返回響應,等到有消息更新才會響應并關閉連接,客戶端處理完響應再重新發起請求。較之普通輪詢沒有無用的請求,但服務器保持連接也是有消耗的,如果服務端數據變化頻繁的話和普通輪詢并無兩樣。
長連接:在頁面中嵌入一個隱藏的iframe,將其src設為一個長連接的請求,這樣服務端就能不斷向客戶端發送數據,優缺點與長輪詢相仿。
這幾種技術都有很大缺點,導致服務器開銷很大,所以我最終選擇了websocket,只需要一次握手,就能完成客戶端和服務之間的連接,之后通過數據幀的方式在這個連接上進行通訊,這個通訊也是雙向的,服務端也可以完成主動向客戶端發送消息,這樣也降低了一大堆的業務邏輯,代碼編寫也變得簡單了起來。
Golang使用websocket也很簡單,只需要導入"github.com/gorilla/websocket"這個包我們就可以使用了。具體使用就不再這里介紹了,看一下再這個項目的代碼示例吧:
beego
這里我是用的是beego框架,這個框架使用起來還是很簡單的,畢竟是國人開發的,有完整的中文文檔,根據文檔我們就可以很快達到入門級別。beego是一個快速開發Go應用的HTTP框架,他可以用來快速開發API、WEB及后端服務等各種應用,是一個RESTful的框架,結合了Go本身的一些特性而設計一個框架。具體學習這個框架我們到(https://beego.me/quickstart)這個網站進行學習,里面有詳細的介紹。作為一個入門框架還是不錯的。
這里我使用了該框架的工具bee,進行項目創建,創建的是一個web項目,創建好后整個項目架構就都有了,項目架構如下:
從目錄結構中我們可以看出,conf用來放置配置文件的,models、views、controllers這三個目錄符合MVC架構,main.go是入口文件、routers目錄用來配置路由,整個項目結構就是這樣,是不是很簡單呢。
這里使用的是Mysql數據庫。這里只創建了兩個表,一個用戶表,一個消息表。用戶表用來存放用戶信息,消息表用來存放消息記錄。因為是一個練手項目,所以沒有設計更多表,只有入門級別。表結構如下:
這里在介紹一下beego ORM。beego ORM是一個強大的Go語言ORM框架。支持數據庫驅動有三個:Mysql、PostgreSQL、Sqlite3,這里使用的是Mysql。輸入如下命令即可完成安裝:
go get github.com/astaxie/beego/orm
安裝完成后,我們開始使用。因為Golang語言有init函數,所以我們可以將注冊數據庫驅動、注冊一個別名數據庫這些方法放到init函數,完成數據庫的驅動注冊。代碼示例如下:
這里我們使用了RunSyndb這個方法,使用該方法我們就不用去手動創建數據庫表了,他會根據結構體中的表結構主動創建,提高了效率。
這里還有一個需要注意的點,如我們我需要我們的項目比較復雜,需要高級查詢,是必須要進行注冊模型的,否則將無法使用。使用RegisterModel即可完成模型注冊。使用樣例如下:
“怎么用go實現多人聊天室”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。