在個人《高性能服務器開發基礎系列》這個系列的第一篇至第六篇都是講了一些零散的不成體系的網絡編程細節。今天,在這篇文章中,我將介紹一款我自主開發的即時通信軟件flamingo(中文:火烈鳥),並開源其服務器和pc客戶端代碼。以此來對前幾篇文章中說到的理論進行實踐。mysql
代碼在github和csdn.net上各上傳了一份:linux
github地址:https://github.com/baloonwj/f...git
csdn地址:github
服務器端代碼地址:http://download.csdn.net/deta...web
pc客戶端代碼:http://download.csdn.net/deta...sql
csdn上代碼可能不是最新的,可是github上的代碼是不斷維護的,包括一些新功能的增長和bug的修復。若是你想關注flamingo的最新功能,請關注github上的更新。若是你只想研究下網絡通訊程序的基本原理和編碼技巧,csdn上的代碼就足夠了。數據庫
目前即時通信軟件實現了以下功能(這裏只列舉網絡相關的功能,其餘客戶端已經實現的功能不統計在列,請自行發現):編程
註冊
登陸
查找好友、查找羣
添加好友、添加羣
好友列表、羣列表、最近會話
單人聊天功能(包括髮文字、表情、窗口抖動、離線文件)
羣聊功能(包括髮文字、表情)
修改密碼
修改我的信息(自定義暱稱、簽名、個性頭像等我的信息)
自動升級功能
下面是一些截圖:服務器
客戶端還有不少細節功能,好比頭像有三種顯示模式、好友上線動畫、聊天記錄、聊天自動回覆功能等,有興趣的同窗能夠本身探索嘗試一下吧,這裏就不截圖了。微信
下面介紹一下服務器代碼和pc客戶端代碼的編譯與運行環境:
flamingo服務器端代碼使用cmake + makefile編譯,使用了純C++11開發,運行於linux系統下(個人系統是CentOS7.0),爲了支持C++11,你的gcc版本至少要大於4.7,個人版本是4.8.5。另外,使用了mysql數據庫,個人數據庫版本是5.7.17。我實際安裝的是mysql的開源分支mariadb,安裝方法以下:
MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL受權許可。開發這個分支的緣由之一是:甲骨文公司收購了MySQL後,有將MySQL閉源的潛在風險,所以社區採用分支的方式來避開這個風險。MariaDB的目的是徹底兼容MySQL,包括API和命令行,使之能輕鬆成爲MySQL的代替品。
安裝mariadb,大小59 M。
[root@yl-web yl]# yum install mariadb-server mariadb mariadb-devel
mariadb數據庫的相關命令是:
systemctl start mariadb #啓動MariaDB
systemctl stop mariadb #中止MariaDB
systemctl restart mariadb #重啓MariaDB
systemctl enable mariadb #設置開機啓動
因此先啓動數據庫
[root@yl-web yl]# systemctl start mariadb
而後就能夠正常使用mysql了
複製代碼
[root@yl-web yl]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or g.
Your MariaDB connection id is 3
Server version: 5.5.41-MariaDB MariaDB Server
Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
MariaDB [(none)]> show databases; |
---|
Database |
information_schema |
mysql |
performance_schema |
test |
4 rows in set (0.00 sec)
MariaDB [(none)]>
複製代碼
安裝mariadb後顯示的也是 MariaDB [(none)]> ,可能看起來有點不習慣。
服務器代碼不只是一款即時通信軟件的服務器代碼,同時也是一款通用的C++11服務器框架。
服務器代碼使用方法:
編譯方法:
3.最終會產生兩個可執行程序,mychatserver和myfilesever。編譯完成
部署方法:
簡單說明:mysql數據庫的用戶名爲root,密碼爲空,請根據你本身的須要設置相應的用戶名和密碼(目前寫死在程序中)。mychatserver是聊天服務器,myfileserver是文件服務器,文件服務器負責上傳和下載聊天中發送的文件,myimgserver負責上傳和下載聊天中的圖片。三個服務相互獨立,互不影響。聊天服務器監聽端口是20000,文件服務器端口是20001,圖片服務器端口號是20002,這三個端口供客戶端鏈接,其中聊天端口和客戶端是長鏈接,文件端口和圖片可選擇長鏈接或短鏈接。
第一次運行mychatserver時,若是能順利連上mysql,mychatserver會自動檢測是否存在名爲myim的數據庫,若是不存在則建立,並新建三張信息表,分別是用戶信息表:t_user, 好友關係表t_user_relationship和聊天消息記錄表t_chatmsg。第一次啓動文件服務器時會建立filecache目錄,這個目錄用來存儲聊天中的聊天圖片和離線文件以及客戶端升級包。
爲了方便查看代碼,我用Visual Studio來管理代碼,可以使用VS打開myserver.sln查看和管理代碼。(VS版本必須是VS2013或以上版本)
客戶端代碼使用方法:
編譯:
1.用VS2013打開程序目錄下的:Flamingo.sln,你可使用其餘的VS版本,可是至少不低於VS2013,由於客戶端代碼也使用了大量C++11語法和庫,VS2013及以上版本才能較好的支持C++11的語法。
若是你暫時不想研究服務器代碼,但又想使用客戶端,你能夠鏈接個人測試服務器,測試服務器地址是:
聊天服務器地址:120.55.94.78 端口號:20000
文件服務器地址:120.55.94.78 端口號:20001
圖片服務器地址:120.55.94.78 端口號:20002
你能夠在登陸界面的網絡設置裏面進行設置(登陸界面右上角最小化按鈕左邊的一個按鈕)。
這篇文章暫且就這樣了吧,若是有您對個人程序有任何意見或者建議,或者有不錯的想法歡迎與我交流或者給我留言(QQ:906106643)。代碼中也有些「拿來主義」,另外程序中使用的圖片和圖標來源於網絡,僅供用於學習,請勿用於商業用途,若是不當心侵犯了您的版權,請聯繫我。
接下來的幾篇文章,我會詳細地介紹這款即時通信軟件服務器端與客戶端代碼的框架結構和實現細節。敬請期待。
固然,我保證,我會持續維護flamingo,讓這款軟件愈來愈好,歡迎關注github上的更新:https://github.com/baloonwj/f...。若是你有任何問題能夠在博客或者github問題頁面留言(https://github.com/baloonwj/f...),我看到會盡可能回覆你的。
歡迎加入羣:49114021,進行技術討論與交流。
歡迎關注公衆號『easyserverdev』。若是有任何技術或者職業方面的問題須要我提供幫助,可經過這個公衆號與我取得聯繫,此公衆號不只分享高性能服務器開發經驗和故事,同時也免費爲廣大技術朋友提供技術答疑和職業解惑,您有任何問題均可以在微信公衆號直接留言,我會盡快回復您。