多人暢聊系統

2021-09-12 12:54:22 字數 1847 閱讀 2319

利用socket網路程式設計技術,實現客戶端和伺服器模型。

利用多執行緒技術,通過訊號量控制線程的同步與互斥。

伺服器端利用生產者與消費者模型對資料進行收發。  

利用開源jsoncpp和ncurses庫。

模擬http協議自定義協議,進行註冊、登入、退出操作。

註冊、登入、退出用的是tcp協議,而聊天用的是udp協議。

c++中stl的string、vector、unordered_map、unordered_set的使用。

.

├── chatclient

├── chatclient.cpp //客戶端

├── chatclient.hpp //客戶端

├── chatserver

├── chatserver.cpp //伺服器

├── chatserver.hpp //伺服器

├── datapool.hpp //資料池,資料中轉站

├── log.hpp //錯誤日誌資訊列印

├── makefile

├── message.hpp //所對應的訊息類

├── protocolutil.hpp//封裝的外部使用的介面

├── run.sh

├── tags

└── window.hpp //ncurses庫所繪製的視窗

註冊與登入

使用者進行註冊、登陸、和退出時,為了保證資訊傳輸的可靠性,這裡用到了tcp協議,並且進行短鏈結(用的時候鏈結,不用的時候立即斷開)形式,這樣可以減少伺服器的開銷。避免大量鏈結掛在伺服器上,導致伺服器癱瘓。

當使用者進行註冊、登陸和退出操作時,這個模擬實現了乙個http請求格式,如下**所示。

class request

~request()

{}};

這是乙個註冊和登入介面,為了方便使用者使用,我們將為使用者定製不同的使用者id從10000開始,所以當使用者註冊成功後將返回乙個id值,在以後登入時只需輸入id和密碼即可。

當使用者進行註冊、登陸、退出時,對使用者例項化出來乙個request物件,將物件進行序列化傳送給伺服器端。

註冊:伺服器端接收到註冊報文時,伺服器會將使用者資訊插入到伺服器用unordered_map(之所以用到unordered_map這個容器,是因為其結構是key,value結構以及底層實現是雜湊,這裡的key就是我們所對應的使用者id,方便查詢,而且效率高)所維護的一張所有使用者列表中,當然插入前會對這個表進行對比要是出現資訊相同的兩個使用者,將返回註冊失敗給使用者,否則註冊成功返回乙個id。

2.聊天

當使用者進行聊天時,為了避免大量鏈結掛在伺服器上,所以聊天時用的是udp協議,udp協議的優點就是不用建立鏈結,而且面向資料報,不會出現資料粘包的問題,但udp也有自己的缺點,就是容易丟包,但是從兩者的利弊來看,顯然這裡使用udp最合適不過了。

3.退出

目前我所寫的這個暢聊系統還是不夠好的,也存在許多問題,隨著日後學習積累經驗,在對其進行新增和修改吧。

專案源**:

暢聊Linux系統運維的未來

我想來跟大家聊聊linux運維這一行業,從幾個方面說下行業的現狀 如何學好linux和如何成為專業運維人員以及雲服務對運linux運維的影響。我們都知道從1991年linux開始火爆全球,蔓延至中國,隨著智慧型中國 網路繁榮發展,眾多應用基本都跑在linux伺服器上面,但對於大多數人來說還是不太了解...

星暢StarOA辦公系統框架介紹

星暢的oa系統由知識管理 日常辦公 人事管理 客戶管理 資產管理 流程管理 系統管理等部分組成 並設有管理駕駛倉功能。其中,知識管理是通過計算機網路進行資訊交流與共享的公共平台。員工可以按系統設定的許可權,發布及檢視部門 公司中的相關資訊 各種規章制度等 也可以發表相關的意見,或就某一問題進行討論。...

聊一聊linux目錄結構與根檔案系統

2,程式編譯方式 編譯時,只呼叫所需要的庫檔案,並不將所需庫檔案複製到程式中,節約了記憶體資源。編譯時,將用到的庫檔案複製乙份包含到程式中。缺點是程式體積較大。3,終端 終端是乙個硬體裝置,其關聯乙個使用者介面。4,作業系統的組成 作業系統大致上由 核心檔案 應用程式和庫檔案組成。其中,應用程式又包...