在我的《高性能服务器开发基础系列》系列中,第一到第六篇都是一些零散的、不系统的网络编程细节。今天在这篇文章中,我将介绍一款自主研发的即时通讯软件火烈鸟(中文:flamingo),并开源其服务端和pc客户端代码。这样,前面几篇文章中提到的理论就付诸实践了。代码在github和csdn.net上传:github地址:https://github.com/baloonwj/f...csdn地址:服务器端代码地址:http://download.csdn.net/deta...pc客户端代码:http://download.csdn.net/deta...csdn上的代码可能不是最新的,但是github上的代码是不断维护的,包括一些新功能的加入和bug的修复。如果你想关注火烈鸟的最新功能,请关注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许可。开发这个分支的原因之一是:Oracle收购MySQL后,存在关闭MySQL的潜在风险,所以社区采用一个分支来规避这个风险。MariaDB的目的就是要完全兼容MySQL,包括API和命令行,这样很容易成为MySQL的替代品。安装mariadb,大小为59M。[root@yl-webyl]#yuminstallmariadb-servermariadbmariadb-develmariadb数据库的相关命令为:systemctlstartmariadb#StartMariaDBsystemctlstopmariadb#StopMariaDBsystemctlrestartmariadb#RestartMariaDBsystemctlenablemariadb#设置开机启动,所以先启动数据库[root@yl-webyl]#systemctlstartmariadb然后就可以正常使用mysql了复制代码[root@yl-webyl]#mysql-uroot-p输入密码:欢迎使用MariaDB监视器。命令以;结尾或g。您的MariaDB连接ID是3Server版本:5.5.41-MariaDBMariaDBServerCopyright(c)2000,2014,Oracle,MariaDBCorporationAbandothers.Type'help;'或'h'寻求帮助。输入'c'清除当前输入语句。MariaDB[(none)]>showdatabases;Databaseinformation_schemamysqlperformance_schematest4rowsinset(0.00sec)MariaDB[(none)]>复制代码并安装mariadb后,显示也是MariaDB[(none)]>,这可能看起来有点奇怪的习惯。服务端代码不仅是一个即时通讯软件的服务端代码,也是一个通用的C++11服务端框架。服务器代码使用方法:编译方法:进入程序目录,输入cmake。(注意有一个点,表示当前目录)如果没有报错,进入make3。最后会生成两个可执行程序,mychatserver和myfilesever。编译后部署方法:简要说明:mysql数据库用户名为root,密码为空。请根据自己的需要设置相应的用户名和密码(目前硬编码在程序中)。mychatserver是聊天服务器,myfileserver是文件服务器,文件服务器负责上传和下载聊天中发送的文件,myimgserver负责上传和下载聊天中的图片。三个服务相互独立,互不影响。聊天服务器的监听端口为20000,文件服务器的端口为20001,图片服务器的端口号为20002,这三个端口用于客户端连接。聊天端口和客户端是长连接,文件端口和图片可以选择长连接或者短连接。.第一次运行mychatserver时,如果能成功连接mysql,mychatserver会自动检测是否有名为myim的数据库,如果没有则创建,并新建三张信息表,分别是用户信息表:t_user,friend关系表t_user_relationship和聊天消息记录表t_chatmsg。第一次启动文件服务器时会创建文件缓存目录。该目录用于存放聊天中的聊天图片、离线文件和客户端升级包。为了方便查看代码,我使用VisualStudio来管理代码,可以用VS打开myserver.sln来查看和管理代码。(VS版本必须是VS2013以上)客户端代码使用方法:编译:1.使用VS2013打开程序目录:Flamingo.sln,可以使用其他VS版本,但至少不能低于VS2013,因为客户端代码也使用了大量的C++11语法和库,VS2013及以上版本可以更好的支持C++11语法。打开的解决方案包括三个项目:Flamingo是即时通讯的主程序,CatchScreen是聊天用的截图工具,iUpdateAuto是升级功能用的解压工具。只需使用VS2013即可编译整个解决方案。编译成功后会在Bin目录下生成相应的程序。启动Flamingo.exe并注册一个帐户以开始使用flamingo。如果暂时不想研究服务器代码,而是想使用客户端,可以连接我的测试服务器,测试服务器地址为:聊天服务器地址:120.55.94.78端口号:20000文件服务器地址:120.55.94.78端口号:20001图片服务器地址:120.55.94.78端口号:20002可以在登录界面的网络设置中设置(登录界面右上角最小化按钮左边的一个按钮)。暂时就这些。如果您对我的程序有什么意见或建议,或者有好的想法,欢迎与我交流或给我留言(QQ:906106643)。代码中也有一些“带思路”。另外,程序中使用的图片和图标均来自网络,仅供学习使用。请不要将它们用于商业目的。如果您不小心侵犯了您的版权,请与我联系。在接下来的几篇文章中,我将详细介绍这款即时通讯软件的框架结构以及服务器端和客户端代码的实现细节。敬请关注。当然,我保证我会继续维护flamingo,让这个软件越来越好。欢迎关注github上的更新:https://github.com/baloonwj/f...。有问题可以在博客或githubissue页(https://github.com/baloonwj/f...)留言,我看到后会尽量回复你。欢迎加群:49114021进行技术讨论交流。欢迎来到公众号『高性能服务器开发』。如果您需要我帮助解决任何技术或专业问题,可以通过这个公众号联系我。本公众号不仅分享高性能服务器开发经验和故事,还免费为技术小伙伴们提供技术解答和解答。有什么问题可以直接微信公众号留言,我会第一时间回复您。
