C/C++即时通讯项目-校招必备
1.即时通讯技术简介
掌握C/C++即时通讯项目对于我们应对校招非常有帮助,可以这么说如果把该项目完全掌握,面试通过腾讯是没有问题的。
技术交流群:Linux后台服务架构技术 762073882
1.1 使用场景
即时通讯技术应用非常广泛,涉及教育、电商、金融、泛娱乐、生活服务、医疗健康、政企服务、游戏聊天、在线客服等等行业,以下以部分典型应用作为简介。
(一)教育
新东方精雕细课课程涵盖职场、教师培训、英语学习以及初高中应试类课程。IM功能的使用,主要是为了进行一些买课之后的后续服务,提供老师和学生直接交流的方式, 提高老师和学生间的联系紧密度,提升学生体验。
(二)电商
小象优品是一家移动互联网信用社交电商平台,基于互联网流量、个性化电商场景、大数据相结合的互联网科技背景,致力于为年轻人群体提供个性化商品聚合及服务聚合的便捷购物体验。将IM即时通讯接入小象优品APP,支持用户线上一对一沟通和多人群聊,为用户搭建分享交互平台,满足用户线上购物多元化需求。
(三)金融
集金号是杭州集金号网络科技有限公司自主研发运营的一款专注于上海黄金交易所业务交易推广的一站式黄金交易软件,集成了单聊群聊,为投资用户间的沟通提供了便捷的渠道
(四)泛娱乐
美篇是一款好用的图文编辑工具,能发100张图片,任意添加文字描述、背景音乐和视频, 1分钟写出像公众号一样图文并茂的文章。美篇集成即时通讯功能,为用户提供了与热爱摄影、旅游、艺术、美食等有共同兴趣爱好的人交流切磋,与大咖随时互动的高效通道。
(五)生活服务
前程无忧成立于1999年,是一家网络招聘服务提供商。2004年9月,前程无忧成为第一个在美国纳斯达克上市的中国人力资源服务企业,是中国最具影响力的人力资源服务供应商之一。集成集成通讯的单聊群聊,为求职者与招聘方提供了便捷的交流渠道,节省了招聘沟通成本,帮助企业更快匹配合适的求职者。
(六)医疗健康
快速问医生使用了即时通讯点对点功能,实现患者与医生之间语音、文字、图片等形式的信息交流,以及相关自定义消息的发送。医生通过患者发送的文字和关键病理部位的图片或者实时语音沟通进行望闻问诊。
(七)政企服务
国家电网使用容联提供的聊天,音视频会议等功能大幅提高了企业内部沟通效率
(八)游戏类产品
同桌游戏是春节增长最快的社交游戏之一,同时获得了社交游戏领域春节榜单的冠军,而这其中环信即时通讯云提供的稳定健壮的底层IM社交服务功不可没
具体应用可以看看下面的图片展示。
由上可知,即时通讯的使用领域非常广泛,掌握即时通讯技术可以增加我们的就业面。
1.2 零声即时通讯项目
零声学院为什么讲授即时通讯项目?因为即时通讯项目涉及的技术点非常多,囊括C/C++ Linux后端开发技术栈的核心知识,比如一个常见的招聘要求:
1、有扎实的C/C++编码能力,扎实的计算机理论基础;
2、精通Linux平台高并发,多线程编程;
3、精通TCP/IP协议,具有丰富的TCP,UDP网络编程经验和框架设计经验;
4、能够熟练使用ZeroMQ、Kafka、Infomatica、Tibco等常见消息中间件中的一种,熟悉分布式系统常见的灾备设计、高性能设计、弹性可扩展设计;
5、熟练使用mysql、redis;
6、沟通表达能力良好,研究学习能力强,对技术有好奇心;
7、有分布式中间件研发,Linux内核研发,网络协议栈研发设计经验者优先考虑;
我们的项目基本上每个技术点都有所覆盖。
完全掌握即时通讯项目能够:(1)提升技术深度和广度;(2)更多的就业机会。具体技术栈见下后续章节的详细描述。
2.即时通讯基础版本
2.1 知识点
如下图1-1所示。
图1-1所涉及的知识点,都是常见的C/C+
Linux服务器开发专业技能,掌握以上的知识点,在一线城市可以找到20k起的薪水。
Json、线程池、数据库连接池、网络库(epoll)封装、Protocol Buffer、交互协议定制、http协议、Redis、ini配置文件、日志系统、内容加密、token机制。
2.2 架构
- Android/iOS/PC:各种客户端。
- LoginServer: 主要负责负载均衡的作用,当收到客户端的请求时,分配一个负载最小的MsgServer给客户端。
- MsgServer: TT的主要服务端,负责维护各个客户端的链接,消息转发等功能。
- RouteServer: 负责消息路由的功能,当msg_server发现某个用户不在本服务器内,而又有消息需要发给他,就会将消息转发给route_server,route_server会将消息发给相应的msg_server,由此可知,route_server也维护了一定的用户状态。
- DBProxy: 在TT中负责了主要的业务逻辑,主要与存储层打交道,提供mysql以及redis的访问服务,屏蔽其他服务器与mysql与redis的直接交互。
- FileServer: 文件服务器,提供客户端之间得文件传输服务,支持在线以及离线文件传输
- MsfsServer: 图片存储服务器,提供头像,图片传输中的图片存储服务。
- PushServer: 负责Android、IOS客户端提醒消息的推送,类似微信的锁屏提醒消息。
- Webserver:简单的管理功能。
2.3 功能
- 私人聊天
- 群组聊天
- 文件传输
- 多点登陆
- 组织架构设置
本项目直接用C++基于socket和io复用的异步机制实现了整个消息服务器,可能有的同学会有点失望,但是大家不要被那些新潮的牛逼哄哄的技术所迷惑,其实所有的技术都是万变不离其中的。新的语言,新的框架,所变的其实都只是编程模型和范式,其底层依然是对socket接口的调用,依然是利用TCP/IP协议传输网络数据,依然是利用select, epoll或kqueue来实现异步消息机制。所以当你明白了如何去用C++和最原始最基本的系统调用来实现一整套高并发可扩展的消息服务器时,你就会明白一切新潮的技术,还有那些不是很新潮的,比如像apache, nginx这些web服务器背后能支撑高并发的最基本的原理。
3.即时通讯改进版本
主要是在基础版本上添加部分功能和替换部分组件,目的是完善项目的功能和提高系统高可用性。
改进点如下所示:
- MsfsServer不支持分布式部署,使用FastDFS或TFS替代
- Mysql主从热备,通过Keepalived+LVS方式来是实现MySQL的高可用性,利用LVS实现MySQL的读写负载均衡,Keepalived避免节点出现单点故障
- Redis主从热备,redis采用主从方案,master宕机后能进行自动切换到slave来读写。
- 增加注册用户、添加好友、删除好友、音视频通话等功能,使用reset api风格。
对于音视频通话功能,一期学员开放自研的音视频通话项目源码,一期以后的学员只提供声网的SDK接入方式。
3.1 知识点
3.2 架构
(1)通过Keepalived+LVS方式来是实现MySQL的高可用性,利用LVS实现MySQL的读写负载均衡,Keepalived避免节点出现单点故障;
(2)redis采用主从方案,master宕机后能进行自动切换到slave来读写。
3.3 功能
- 私人聊天
- 群组聊天
- 文件传输
- 多点登陆
- 组织架构设置
- 添加、删除好友
- 用户注册
- 音视频通话