伺服器端程式設計心得(七)——開源一款即時通訊軟體的原始碼
在我的《伺服器端程式設計心得》這個系列的第一篇至第六篇都是講了一些零散的不成體系的網路程式設計細節。今天,在這篇文章中,我將介紹一款我自主開發的即時通訊軟體flamingo(中文:火烈鳥),並開源其伺服器和pc客戶端程式碼。以此來對前幾篇文章中說到的理論進行實踐。
程式碼在github和csdn.net上各上傳了一份:
csdn地址:
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,安裝方法如下:
[[email protected] yl]# yum install mariadb-server mariadb mariadb-devel
mariadb資料庫的相關命令是:
systemctl start mariadb #啟動MariaDB systemctl stop mariadb #停止MariaDB systemctl restart mariadb #重啟MariaDB systemctl enable mariadb #設定開機啟動
所以先啟動資料庫
[[email protected] yl]# systemctl start mariadb
然後就可以正常使用mysql了:
[[email protected] 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)]>
注意:如果你使用的是低版本的CentOS系統,或者其他版本的linux系統,你安裝的mysql不是mariadb的話,需要安裝的分別是:mysql-server mysql 和mysql-devel。
伺服器程式碼不僅是一款即時通訊軟體的伺服器程式碼,同時也是一款通用的C++11伺服器框架。
伺服器程式碼使用方法:
編譯方法
1. 進入程式目錄,輸入cmake . (注意有一個點號,表示當前目錄)
2. 沒有錯誤,輸入make
3.最終會產生三個可執行程式:
聊天伺服器 chatserver
檔案伺服器 filesever
圖片伺服器 imgserver
編譯完成。
部署方法:
說明:
在配置檔案中etc/chatserver.conf中,配置的mysql資料庫的使用者名稱為root,密碼為123456,請根據你自己的需要修改相應的使用者名稱和密碼。
chatserver是聊天伺服器,fileserver是檔案伺服器,檔案伺服器負責上傳和下載聊天中傳送的檔案,imgserver負責上傳和下載聊天中的圖片。三個服務相互獨立,互不影響。聊天伺服器監聽埠是20000,檔案伺服器埠是20001,圖片伺服器埠號是20002,這三個埠供客戶端連線,其中聊天埠和客戶端是長連線,檔案埠和圖片可選擇長連線或短連線。
第一次執行chatserver時,如果能順利連上mysql,chatserver會自動檢測是否存在名為flamingo的資料庫,如果不存在則建立之,並新建三張資訊表,分別是使用者資訊表:t_user, 好友關係表t_user_relationship和聊天訊息記錄表t_chatmsg。第一次啟動fileserver時會建立filecache目錄,這個目錄用來儲存聊天中的離線檔案以及客戶端升級包。第一次啟動imgserver時,會建立imgcache目錄,這個用於儲存聊天過程中的聊天圖片和使用者頭像檔案。
為了方便檢視程式碼,我用Visual Studio來管理程式碼,可使用VS開啟myserver.sln檢視和管理程式碼。(VS版本必須是VS2013或以上版本)
pc客戶端程式碼使用方法
編譯:
1.用VS2013開啟程式目錄下的:Flamingo.sln,你可以使用其他的VS版本,但是至少不低於VS2013,因為客戶端程式碼也使用了大量C++11語法和庫,VS2013及以上版本才能較好的支援C++11的語法。
2. 開啟的解決方案包括三個專案:Flamingo是即時通訊主程式,CatchScreen是聊天中使用的截圖工具,iUpdateAuto是升級功能中用到的解壓工具。
3. 用VS2013編譯整個解決方法即可,編譯成功以後將在Bin目錄下生成對應的程式。啟動Flamingo.exe註冊一個賬號就可以開始使用flamingo了。
Android客戶端編譯方法
使用Android Studio開啟對應的flamingo安卓專案編譯,生成apk檔案安裝到手機上即可使用。
如果你暫時不想研究伺服器程式碼,但又想使用客戶端,你可以連線我的測試伺服器,測試伺服器地址是:
聊天伺服器地址:120.55.94.78 埠號:20000
檔案伺服器地址:120.55.94.78 埠號:20001
圖片伺服器地址:120.55.94.78 埠號:20002
你可以在登入介面的網路設定裡面進行設定(登入介面右上角最小化按鈕左邊的一個按鈕)。
這篇文章暫且就這樣了吧,如果有您對我的程式有任何意見或者建議,或者有不錯的想法歡迎與我交流或者給我留言(QQ:906106643).。程式碼中也有些“拿來主義”,另外程式中使用的圖片和圖示來源於網路,僅供用於學習,請勿用於商業用途,如果不小心侵犯了您的版權,請聯絡我。
接下來的幾篇文章,我會詳細地介紹這款即時通訊軟體伺服器端與客戶端程式碼的框架結構和實現細節。敬請期待。
當然,我保證,我會持續維護flamingo,讓這款軟體越來越好,歡迎關注github上的更新:
歡迎加入群:49114021,進行技術討論與交流。
更多伺服器開發知識,歡迎關注『高效能伺服器開發』公眾號: