?。?!項目是照著騰訊課堂施磊老師的視頻學(xué)習(xí),僅供個人學(xué)習(xí)記錄使用?。?!
?。。№椖渴钦罩v訊課堂施磊老師的視頻學(xué)習(xí),僅供個人學(xué)習(xí)記錄使用?。?!
!??!項目是照著騰訊課堂施磊老師的視頻學(xué)習(xí),僅供個人學(xué)習(xí)記錄使用!?。?/strong>
項目內(nèi)容
使用muduo網(wǎng)絡(luò)庫搭建網(wǎng)絡(luò)核心模塊、Nginx實現(xiàn)聊天服務(wù)器的集群,提高并發(fā)能力、Redis作為消息中間件、MySQL作為數(shù)據(jù)存儲、json序列化和反序列化作為通信協(xié)議的實時聊天服務(wù)器。
開發(fā)環(huán)境
Centos 7 + VsCode遠程Linux開發(fā)、Cmake構(gòu)建、Linux Shell輸出項目編譯腳本
安裝說明
1、Linux下安裝Nginx并配置Tcp負載均衡
2、Linux下安裝MySQL
3、Linux下安裝Redis
4、安裝CMake
技術(shù)介紹
1、使用muduo網(wǎng)絡(luò)庫作為項目的網(wǎng)絡(luò)核心模塊,提供高并發(fā)網(wǎng)絡(luò)IO服務(wù),解耦網(wǎng)絡(luò)和業(yè)務(wù)模塊代碼;
2、使用json序列化和反序列化消息作為私有通信協(xié)議;
3、配置nginx基于tcp的負載均衡,實現(xiàn)聊天服務(wù)器的集群功能,提高后端服務(wù)的并發(fā)能力;
4、基于redis的發(fā)布-訂閱功能,實現(xiàn)跨服務(wù)器的消息通信;
5、使用mysql關(guān)系型數(shù)據(jù)庫作為項目數(shù)據(jù)的落地存儲;
6、使用連接池提高數(shù)據(jù)庫的數(shù)據(jù)存取功能。
項目目錄
- autobuild.sh:一鍵編譯腳本
- chat.sql:創(chuàng)建數(shù)據(jù)庫表的sql腳本
- bin:存放服務(wù)器和客戶端的可執(zhí)行程序
- build:cmake編譯生成的臨時文件
- CMakeLists.txt:項目使用cmake作為編譯環(huán)境
- include:項目的頭文件
- src:項目的源文件
- test:muduo網(wǎng)絡(luò)庫使用的demo和json序列化和反序列化的demo
- thirdparty:存放json.hpp
數(shù)據(jù)庫設(shè)計
項目介紹
功能分為:登錄賬號、注冊賬號、退出賬號、一對一聊天業(yè)務(wù)、創(chuàng)建群聊業(yè)務(wù)、加入群聊業(yè)務(wù)、群內(nèi)發(fā)消息業(yè)務(wù)、添加好友業(yè)務(wù)、離線消息存儲業(yè)務(wù)。
特別說明:以下示例已經(jīng)啟動Nginx和redis-server,Nginx集群了兩臺服務(wù)器,端口分別為6000、6002。
啟動服務(wù)器
這里啟動兩臺服務(wù)器,因為Nginx配置tcp負載均衡時配置了兩臺。
啟動客戶端
同樣啟動兩臺客戶端進行聊天業(yè)務(wù)。
注冊賬號
wang wu用戶注冊成功,他的用戶id為3,登錄時通過用戶id去登錄。
登錄成功
兩臺客戶端分別登錄了兩個用戶,用戶id分別為1和3,可以看到用戶id為1的用戶已經(jīng)添加了好友和群聊,但是id為3的用戶還沒有添加任何好友和群聊。
一對一聊天業(yè)務(wù)
現(xiàn)在進行id=3和id=1之間聊天,不是好友也可以互相聊天。
一對一聊天的命令行輸入為:chat:用戶id:內(nèi)容
創(chuàng)建群聊業(yè)務(wù)
創(chuàng)建群聊的命令行:creategroup:群聊名:群聊描述
創(chuàng)建群聊的人權(quán)限為創(chuàng)建者。
可以看到,數(shù)據(jù)庫里群聊已經(jīng)創(chuàng)建成功,群聊id為2,userid=3的用戶在groupid=2的群里的權(quán)限為創(chuàng)建者。
加入群聊業(yè)務(wù)
userid=1的用戶加入groupid=2的群,他的權(quán)限為普通權(quán)限。
群聊業(yè)務(wù)
userid=3的用戶在groupid=2的群里發(fā)了一條消息,群內(nèi)成員收到了這條消息。
添加好友業(yè)務(wù)
可以看到,userid=3的用戶有一個好友,好友id=1,即userid=1的用戶。
離線消息存儲業(yè)務(wù)
現(xiàn)在我們讓userid=3的用戶退出,userid=1的用戶持續(xù)為他發(fā)消息。
數(shù)據(jù)庫里已經(jīng)存了兩條消息,但是中文亂碼了,不影響結(jié)果。
現(xiàn)在我們讓userid=3的用戶重新登錄。
剛剛添加的好友、群聊、離線消息在重新登錄之后都成功顯示出來了。
特殊說明
要使程序成功跑起來,需要在db.cpp的數(shù)據(jù)庫ip和密碼改成自己本機的ip和密碼。
文章來源:http://www.zghlxwxcb.cn/news/detail-858797.html
Gitee地址
https://gitee.com/hnSVN/ChatServerProject文章來源地址http://www.zghlxwxcb.cn/news/detail-858797.html
到了這里,關(guān)于基于muduo網(wǎng)絡(luò)庫實現(xiàn)的集群聊天服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!