溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

高性能服務(wù)器開(kāi)發(fā)基礎(chǔ)系列 (七)——開(kāi)源一款即時(shí)通訊軟件的源碼

發(fā)布時(shí)間:2020-06-27 05:13:45 來(lái)源:網(wǎng)絡(luò) 閱讀:3790 作者:張小方32 欄目:建站服務(wù)器

在我的《高性能服務(wù)器開(kāi)發(fā)基礎(chǔ)系列》這個(gè)系列的第一篇至第六篇都是講了一些零散的不成體系的網(wǎng)絡(luò)編程細(xì)節(jié)。今天,在這篇文章中,我將介紹一款我自主開(kāi)發(fā)的即時(shí)通訊軟件flamingo(中文:火烈鳥),并開(kāi)源其服務(wù)器和pc客戶端代碼。以此來(lái)對(duì)前幾篇文章中說(shuō)到的理論進(jìn)行實(shí)踐。

代碼在github和csdn.net上各上傳了一份:

github地址:https://github.com/baloonwj/flamingo

csdn地址:

服務(wù)器端代碼地址:http://download.csdn.net/detail/analogous_love/9805797

pc客戶端代碼:http://download.csdn.net/detail/analogous_love/9805795

csdn上代碼可能不是最新的,但是github上的代碼是不斷維護(hù)的,包括一些新功能的增加和bug的修復(fù)。如果你想關(guān)注flamingo的最新功能,請(qǐng)關(guān)注github上的更新。如果你只想研究下網(wǎng)絡(luò)通信程序的基本原理和編碼技巧,csdn上的代碼就足夠了。

目前即時(shí)通訊軟件實(shí)現(xiàn)了如下功能(這里只列舉網(wǎng)絡(luò)相關(guān)的功能,其他客戶端已經(jīng)實(shí)現(xiàn)的功能不統(tǒng)計(jì)在列,請(qǐng)自行發(fā)現(xiàn)):

注冊(cè)
登錄
查找好友、查找群
添加好友、添加群
好友列表、群列表、最近會(huì)話
單人聊天功能(包括發(fā)文字、表情、窗口抖動(dòng)、離線文件)
群聊功能(包括發(fā)文字、表情)
修改密碼
修改個(gè)人信息(自定義昵稱、簽名、個(gè)性頭像等個(gè)人信息)
自動(dòng)升級(jí)功能
下面是一些截圖:

高性能服務(wù)器開(kāi)發(fā)基礎(chǔ)系列 (七)——開(kāi)源一款即時(shí)通訊軟件的源碼
高性能服務(wù)器開(kāi)發(fā)基礎(chǔ)系列 (七)——開(kāi)源一款即時(shí)通訊軟件的源碼
高性能服務(wù)器開(kāi)發(fā)基礎(chǔ)系列 (七)——開(kāi)源一款即時(shí)通訊軟件的源碼
高性能服務(wù)器開(kāi)發(fā)基礎(chǔ)系列 (七)——開(kāi)源一款即時(shí)通訊軟件的源碼
高性能服務(wù)器開(kāi)發(fā)基礎(chǔ)系列 (七)——開(kāi)源一款即時(shí)通訊軟件的源碼
高性能服務(wù)器開(kāi)發(fā)基礎(chǔ)系列 (七)——開(kāi)源一款即時(shí)通訊軟件的源碼
高性能服務(wù)器開(kāi)發(fā)基礎(chǔ)系列 (七)——開(kāi)源一款即時(shí)通訊軟件的源碼
高性能服務(wù)器開(kāi)發(fā)基礎(chǔ)系列 (七)——開(kāi)源一款即時(shí)通訊軟件的源碼
高性能服務(wù)器開(kāi)發(fā)基礎(chǔ)系列 (七)——開(kāi)源一款即時(shí)通訊軟件的源碼
高性能服務(wù)器開(kāi)發(fā)基礎(chǔ)系列 (七)——開(kāi)源一款即時(shí)通訊軟件的源碼

客戶端還有很多細(xì)節(jié)功能,比如頭像有三種顯示模式、好友上線動(dòng)畫、聊天記錄、聊天自動(dòng)回復(fù)功能等,有興趣的同學(xué)可以自己探索嘗試一下吧,這里就不截圖了。

下面介紹一下服務(wù)器代碼和pc客戶端代碼的編譯與運(yùn)行環(huán)境:

flamingo服務(wù)器端代碼使用cmake + makefile編譯,使用了純C++11開(kāi)發(fā),運(yùn)行于linux系統(tǒng)下(我的系統(tǒng)是CentOS7.0),為了支持C++11,你的gcc版本至少要大于4.7,我的版本是4.8.5。另外,使用了mysql數(shù)據(jù)庫(kù),我的數(shù)據(jù)庫(kù)版本是5.7.17。我實(shí)際安裝的是mysql的開(kāi)源分支mariadb,安裝方法如下:

MariaDB數(shù)據(jù)庫(kù)管理系統(tǒng)是MySQL的一個(gè)分支,主要由開(kāi)源社區(qū)在維護(hù),采用GPL授權(quán)許可。開(kāi)發(fā)這個(gè)分支的原因之一是:甲骨文公司收購(gòu)了MySQL后,有將MySQL閉源的潛在風(fēng)險(xiǎn),因此社區(qū)采用分支的方式來(lái)避開(kāi)這個(gè)風(fēng)險(xiǎn)。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品。

安裝mariadb,大小59 M。

[root@yl-web yl]# yum install mariadb-server mariadb mariadb-devel
mariadb數(shù)據(jù)庫(kù)的相關(guān)命令是:

systemctl start mariadb #啟動(dòng)MariaDB

systemctl stop mariadb #停止MariaDB

systemctl restart mariadb #重啟MariaDB

systemctl enable mariadb #設(shè)置開(kāi)機(jī)啟動(dòng)

所以先啟動(dòng)數(shù)據(jù)庫(kù)

[root@yl-web yl]# systemctl start mariadb
然后就可以正常使用mysql了

復(fù)制代碼
[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)]>
復(fù)制代碼
安裝mariadb后顯示的也是 MariaDB [(none)]> ,可能看起來(lái)有點(diǎn)不習(xí)慣。

服務(wù)器代碼不僅是一款即時(shí)通訊軟件的服務(wù)器代碼,同時(shí)也是一款通用的C++11服務(wù)器框架。

服務(wù)器代碼使用方法:

編譯方法:

  1. 進(jìn)入程序目錄,輸入cmake . (注意有一個(gè)點(diǎn)號(hào),表示當(dāng)前目錄)

  2. 沒(méi)有錯(cuò)誤,輸入make

3.最終會(huì)產(chǎn)生兩個(gè)可執(zhí)行程序,mychatserver和myfilesever。編譯完成

部署方法:

簡(jiǎn)單說(shuō)明:mysql數(shù)據(jù)庫(kù)的用戶名為root,密碼為空,請(qǐng)根據(jù)你自己的需要設(shè)置相應(yīng)的用戶名和密碼(目前寫死在程序中)。mychatserver是聊天服務(wù)器,myfileserver是文件服務(wù)器,文件服務(wù)器負(fù)責(zé)上傳和下載聊天中發(fā)送的文件,myimgserver負(fù)責(zé)上傳和下載聊天中的圖片。三個(gè)服務(wù)相互獨(dú)立,互不影響。聊天服務(wù)器監(jiān)聽(tīng)端口是20000,文件服務(wù)器端口是20001,圖片服務(wù)器端口號(hào)是20002,這三個(gè)端口供客戶端連接,其中聊天端口和客戶端是長(zhǎng)連接,文件端口和圖片可選擇長(zhǎng)連接或短連接。

第一次運(yùn)行mychatserver時(shí),如果能順利連上mysql,mychatserver會(huì)自動(dòng)檢測(cè)是否存在名為myim的數(shù)據(jù)庫(kù),如果不存在則創(chuàng)建,并新建三張信息表,分別是用戶信息表:t_user, 好友關(guān)系表t_user_relationship和聊天消息記錄表t_chatmsg。第一次啟動(dòng)文件服務(wù)器時(shí)會(huì)創(chuàng)建filecache目錄,這個(gè)目錄用來(lái)存儲(chǔ)聊天中的聊天圖片和離線文件以及客戶端升級(jí)包。

為了方便查看代碼,我用Visual Studio來(lái)管理代碼,可使用VS打開(kāi)myserver.sln查看和管理代碼。(VS版本必須是VS2013或以上版本)

客戶端代碼使用方法:

編譯:

1.用VS2013打開(kāi)程序目錄下的:Flamingo.sln,你可以使用其他的VS版本,但是至少不低于VS2013,因?yàn)榭蛻舳舜a也使用了大量C++11語(yǔ)法和庫(kù),VS2013及以上版本才能較好的支持C++11的語(yǔ)法。

  1. 打開(kāi)的解決方案包括三個(gè)項(xiàng)目:Flamingo是即時(shí)通訊主程序,CatchScreen是聊天中使用的截圖工具,iUpdateAuto是升級(jí)功能中用到的解壓工具。

  2. 用VS2013編譯整個(gè)解決方法即可,編譯成功以后將在Bin目錄下生成對(duì)應(yīng)的程序。啟動(dòng)Flamingo.exe注冊(cè)一個(gè)賬號(hào)就可以開(kāi)始使用flamingo了。

如果你暫時(shí)不想研究服務(wù)器代碼,但又想使用客戶端,你可以連接我的測(cè)試服務(wù)器,測(cè)試服務(wù)器地址是:

聊天服務(wù)器地址:120.55.94.78 端口號(hào):20000

文件服務(wù)器地址:120.55.94.78 端口號(hào):20001

圖片服務(wù)器地址:120.55.94.78 端口號(hào):20002

你可以在登錄界面的網(wǎng)絡(luò)設(shè)置里面進(jìn)行設(shè)置(登錄界面右上角最小化按鈕左邊的一個(gè)按鈕)。

這篇文章暫且就這樣了吧,如果有您對(duì)我的程序有任何意見(jiàn)或者建議,或者有不錯(cuò)的想法歡迎與我交流或者給我留言(QQ:906106643)。代碼中也有些“拿來(lái)主義”,另外程序中使用的圖片和圖標(biāo)來(lái)源于網(wǎng)絡(luò),僅供用于學(xué)習(xí),請(qǐng)勿用于商業(yè)用途,如果不小心侵犯了您的版權(quán),請(qǐng)聯(lián)系我。

接下來(lái)的幾篇文章,我會(huì)詳細(xì)地介紹這款即時(shí)通訊軟件服務(wù)器端與客戶端代碼的框架結(jié)構(gòu)和實(shí)現(xiàn)細(xì)節(jié)。敬請(qǐng)期待。

當(dāng)然,我保證,我會(huì)持續(xù)維護(hù)flamingo,讓這款軟件越來(lái)越好,歡迎關(guān)注github上的更新:https://github.com/baloonwj/flamingo。如果你有任何問(wèn)題可以在博客或者github問(wèn)題頁(yè)面留言(https://github.com/baloonwj/flamingo/issues),我看到會(huì)盡量回復(fù)你的。

歡迎加入群:49114021,進(jìn)行技術(shù)討論與交流。

歡迎關(guān)注公眾號(hào)『easyserverdev』。如果有任何技術(shù)或者職業(yè)方面的問(wèn)題需要我提供幫助,可通過(guò)這個(gè)公眾號(hào)與我取得聯(lián)系,此公眾號(hào)不僅分享高性能服務(wù)器開(kāi)發(fā)經(jīng)驗(yàn)和故事,同時(shí)也免費(fèi)為廣大技術(shù)朋友提供技術(shù)答疑和職業(yè)解惑,您有任何問(wèn)題都可以在微信公眾號(hào)直接留言,我會(huì)盡快回復(fù)您。
高性能服務(wù)器開(kāi)發(fā)基礎(chǔ)系列 (七)——開(kāi)源一款即時(shí)通訊軟件的源碼

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI