【C++埋点SDK实战】0-开篇词

C++开发 埋点技术 SDK实战 跨平台 性能优化
本文介绍了作者决定带领读者实战开发一个C++埋点客户端SDK的初衷和背景。作者指出,C++在后端领域岗位较少,更适合嵌入式、人工智能、游戏等领域,尤其在跨平台开发中应用广泛。埋点SDK的作用在于监控客户端应用的运行状态,帮助团队获取数据以优化产品和排查问题。该项目将专注于开发Windows平台的SDK,但代码可跨平台使用。项目涉及多个C++知识点,如线程池、定时器、网络请求等,适合进阶学习和提升项目经验。作者计划通过系列文章和源代码分享,带领读者从零开始完成该项目。
文章内容
思维导图
常见问题
社交分享

大家好,我是程序喵。

好多同学跟我反馈说想要我带着实战一个C++项目,我想了好久,最终决定做一个埋点相关的客户端SDK。

为什么要做客户端SDK?

我看过很多校招生C++简历中的项目经验,几乎清一色的Web Server,但其实现在C++在后端领域岗位相对比较少,貌似只有量化领域和某些游戏公司在使用C++做后端。

如果大家想做后端方向的话,我建议去学习Go或者Java,可能会比C++更适合一些。

C++现在主要应用在嵌入式领域、人工智能工业化、游戏等方向,很多移动端应用底层为了跨平台,也会使用C++,比如编解码能力、音视频能力、人脸识别能力等,都是使用C++开发,然后编译出可以在多平台运行的SDK,给业务方程序员使用。

很多企业也会用QT C++做桌面端应用,这种岗位需要了解QT的相关API使用,甚至是原理,但想做合格的桌面端程序,还是要深入学习C++才行。

所以,虽然很多人在唱衰客户端,但唱衰的很多都是客户端开发页面的程序员,因为现在比较流行大前端,页面很多可以用Flutter等跨平台相关的组件或前端语言开发,不太能唱衰的到C++。

而且在大企业中,相关的程序性能至关重要,想要高性能,几乎都要用到C++或C,当然,Rust也行,但现在Rust在国内岗位相当少,盲目走Rust方向风险比较高。

为什么要做埋点SDK?

任何一款客户端应用在线上运行,我们需要监控它的在线状态,比如日活、是否有崩溃、崩溃率、某些模块运行过程中是否出现异常、用户频繁使用哪些功能等等。

这些都需要团队内部的成员可以感知到,拿到这些数据,方便产品运营人员修正迭代产品功能,方便开发人员排查线上问题等。

所以一般客户端应用都需要做很多埋点,把客户端应用运行过程中的相关数据传回到团队内部。当然,上面的某些能力可以当做一个特定产品需求开发,不需要走埋点。

不过在线上,场景非常复杂,比如用户的使用方式、用户的操作系统、硬件等都千差万别,程序不会绝对稳定,代码中的异常位置通常不确定,所以需要开发人员在代码中做很多埋点,出现问题可以及时反馈回团队内部,团队做数据追踪和分析,进而快速修复问题。

所以,这里其实就可以成立一个小组,产品主要有埋点客户端SDK + 网站 + 后端,客户端SDK可以给公司内的多个APP业务部门去集成,然后埋点数据上报到后台,各个业务部门可以在管理端查看搜索相关埋点,再提供聚类和分析能力,就更完美了。

不过这个项目中,我们只会做客户端SDK,后端我会做一个模拟的mock server,只负责接收数据和返回固定body。

平台

因为大多数同学都使用Windows电脑,所以咱做的是Windows SDK,但因为使用的是C++语言,其实可以跨平台到Linux、MacOS、Android、iOS等,只需要把Windows平台相关特性的代码去掉,并且改动Cmake配置即可。

相关知识点

整个埋点SDK功能不多,代码量不大,但麻雀虽小五脏俱全,整个项目会涉及到很多C++相关的知识点:

  1. C、C++
  2. C++ 新特性
  3. 线程池
  4. 定时器
  5. Windows 注册表操作
  6. 数据库操作
  7. 文件系统相关操作
  8. 时间相关操作
  9. 日志系统
  10. Json
  11. 加解密
  12. HTTP、HTTPS网络请求
  13. 网络通信协议的设计

一个大型项目涉及到的技术点,咱这个项目应该多数都会用到。对于学习进阶C++、提升项目经验,我认为还是非常有帮助的。

后面我会用大概15篇左右文章(大概每周更新2篇,还会不定期更新加餐文章),带大家从0到1做这个项目,并提供相关源代码,对代码感兴趣的朋友可以先行查看:https://github.com/chengxumiaodaren/BuriedPoint

思维导图生成中,请稍候...

问题 1: 为什么要选择C++来开发埋点SDK?
回答: C++在嵌入式、人工智能、游戏等领域有广泛应用,尤其是在需要高性能的场景中。许多移动端应用的底层功能(如编解码、音视频处理、人脸识别)也使用C++开发,因此C++非常适合开发跨平台的SDK。

问题 2: 埋点SDK的主要作用是什么?
回答: 埋点SDK用于监控客户端应用的在线状态,如日活、崩溃率、模块异常等。它帮助团队收集数据,便于产品运营人员修正功能,开发人员排查问题,从而提升应用的稳定性和用户体验。

问题 3: 这个项目会涉及哪些C++相关的知识点?
回答: 项目涉及C/C++基础、C++新特性、线程池、定时器、Windows注册表操作、数据库操作、文件系统操作、时间操作、日志系统、Json、加解密、HTTP/HTTPS网络请求以及网络通信协议设计等。

问题 4: 这个项目是否支持跨平台?
回答: 是的,虽然项目主要针对Windows平台,但由于使用C++语言,只需去掉Windows平台相关代码并调整Cmake配置,即可跨平台到Linux、MacOS、Android和iOS等系统。

问题 5: 项目会提供源代码吗?
回答: 是的,项目会提供完整的源代码,感兴趣的朋友可以访问GitHub仓库查看:https://github.com/chengxumiaodaren/BuriedPoint

问题 6: 这个项目适合哪些人群?
回答: 这个项目适合希望学习进阶C++、提升项目经验的开发者,尤其是对客户端SDK开发、埋点技术感兴趣的初学者和中级开发者。

问题 7: 项目会涉及后端开发吗?
回答: 不会,项目主要专注于客户端SDK的开发,后端会使用一个模拟的mock server来接收数据和返回固定响应。

问题 8: 项目的更新频率是怎样的?
回答: 预计会发布15篇左右的文章,每周更新2篇,同时还会不定期发布加餐文章,帮助大家从0到1完成这个项目。

问题 9: 为什么选择埋点作为实战项目?
回答: 埋点是客户端应用开发中的重要环节,能够帮助团队监控应用状态、收集用户数据,提升产品的稳定性和用户体验。通过实战埋点SDK,可以学习到C++的多种核心技术,具有很高的实用价值。

问题 10: 这个项目对职业发展有什么帮助?
回答: 通过这个项目,开发者可以掌握C++的核心技术,积累项目经验,尤其是对嵌入式、人工智能、游戏等领域的职业发展有很大帮助。同时,埋点技术在实际工作中也有广泛应用,能够提升开发者的竞争力。