高性能服务器开发基础系列 (七)——开源一款即时通讯软件的源码
在我的《高性能服务器开发基础系列》这个系列的第一篇至第六篇都是讲了一些零散的不成体系的网络编程细节。今天,在这篇文章中,我将介绍一款我自主开发的即时通讯软件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的修复。如果你想关注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服务器框架。
服务器代码使用方法:
编译方法:
- 进入程序目录,输入cmake . (注意有一个点号,表示当前目录)
- 没有错误,输入make
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的语法。
- 打开的解决方案包括三个项目: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...。如果你有任何问题可以在博客或者github问题页面留言(https://github.com/baloonwj/f...),我看到会尽量回复你的。
欢迎加入群:49114021,进行技术讨论与交流。
欢迎关注公众号『easyserverdev』。如果有任何技术或者职业方面的问题需要我提供帮助,可通过这个公众号与我取得联系,此公众号不仅分享高性能服务器开发经验和故事,同时也免费为广大技术朋友提供技术答疑和职业解惑,您有任何问题都可以在微信公众号直接留言,我会尽快回复您。
高性能服务器开发基础系列 (七)——开源一款即时通讯软件的源码相关推荐
- 服务器端编程心得(七)——开源一款即时通讯软件的源码
服务器端编程心得(七)--开源一款即时通讯软件的源码 2017年04月06日 22:57:01 analogous_love 阅读数:30222更多 所属专栏: 高性能服务器编程实现细节详解 版权声明 ...
- C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码
.NET core2.0 发布了,刺激,大致看了一下,很不错,打算后期学习.(不出意外,应该也会写个小系列). 虽然官方推荐用共享类库创建新的类库..然而我这个Demo还是使用的可移植.. 嗯..解释 ...
- 安卓开发基础面试题,Android面试必备的集合源码详解,附小技巧
去年无疑是 Flutter 技术如火如荼发展的一年. 每一个移动开发者都在为 Flutter 带来的"快速开发.富有表现力和灵活的 UI.原生性能"的特色和理念而痴狂,从超级 Ap ...
- 高性能服务器开发 2018 年原创汇总
2018 年就这样过去了,总结一下 2018 年『高性能服务器开发』公众号发表的一些原创文章,欢迎读者鉴阅. 面试求职 写给那些傻傻想做服务器开发的朋友 『腾讯后台开发』实习生技能要求 去BAT,你应 ...
- 好教程推荐系列:张小方的《高性能服务器开发》以及《30天自制C++服务器》
张小方的<高性能服务器开发> 首先感谢技术达人张小方的原创资料分享!!!欢迎关注[高性能服务器开发]微信公众号 1.张小方整理的优质的C++后端开发进阶学习资料 CppGuide: 优质的 ...
- 多人网络游戏服务器开发基础学习笔记 II: 帧同步 | 游戏客户端预测原理分析 | FPS 游戏状态同步
这篇是对书本 网络多人游戏架构与编程 的学习第二篇(第一篇:多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | ...
- Linux高性能服务器开发——进程篇
本文主要是学习Linux高性能服务器开发需要提前了解的知识,后续还会涉及到虚拟内存方面的内容,各位看官可以多了解了解,看到文章内有将的不清楚或者讲错的地方请各位一定留言,我看到后会第一时间验证并修正的 ...
- asp.net控件开发基础系列
本系列文章示例源码下载.各位如遇问题,请多查msdn,多利用网络.本人可能没时间一一回复,谢谢你们的支持,希望看到此文的人都能学好控件开发 http://www.cnblogs.com/Clingin ...
- Linux 高性能服务器开发笔记:Reactor 模型定时器 | 网络编程定时器
本文主要根据游双书本 Linux 高性能服务器开发 学习分析 linux 网络编程常用到的定时器模型,配备详细理解和分析,同时分析了 Linux 内核中定时器的低精度时间轮和高精度定时器实现思路还有 ...
- 掌握web开发基础系列--物理像素、逻辑像素、css像素
思考一下 什么是物理像素?什么是css像素? 在 <掌握web开发基础系列--长度单位> 这篇文章中已经介绍过了css像素单位--px,这篇文章详细探讨一下设备物理像素和css像素之间的关 ...
最新文章
- 【重读iOS】网络请求2:应用
- 以云原生的名义,举办一次技术聚会
- C#将图像文件压缩为AVI文件播放
- Java设计模式(十二):状态设计模式
- Hadoop学习(二)——MapReduce\Yarn架构
- 数据结构实验五 查找算法的实现
- Redkale 让你重新认识Java
- 如果战斗机飞行员弹出,自动驾驶仪会接管飞机安全降落么?
- JQuery——实现Ajax应用
- VS编译错误与链接错误汇总
- Atitit 事务的一些概念 目录 1. 事务的另一个特性:数据隔离级别	1 2. Spring五个事务隔离级别和七个事务传播行为	1 3. 在TransactionDefinition接口中定义了
- 截图工具-Excel加载宏(图片大小可调)
- 时间管理表 - 《月总结计划表》
- ubuntu安装系分区,挂载磁盘
- java自行车 one_小白装车宝典——JAVA ONE七步装车法
- mysql如何盈利_mysql到底是不是免费的?
- 微信小程序实现点餐系统
- 第5部分- Linux ARM汇编 ARM 架构细节
- octopus - UI框架
- 快手极速版自动翻视频