利用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,作業系統的組成 作業系統大致上由 核心檔案 應用程式和庫檔案組成。其中,應用程式又包...