|
0 @: J+ F* m! t6 u+ W: K嵌入式也有使用C++的情况, 就是使用C++在一些场合下可以大幅度提高开发速度.上个月刚完成了一个嵌入式 wifi 项目自研版本 wifidog , 大家知道wifidog是一个提供wifi侧配合服务器侧Portal功能的C语言开源程序, 整体代码量近1万行, 是很多厂家wifi提供Portal功能的选择, 在很多wifi设备中都可以找到wifidog这个开源软件. 我们用C++重新实现了整个Wifidog的全部功能, 并且做了大量的扩展和优化. 后期会对一些相关厂家开放授权, 对比原生版本wifidog, 有三大类优化:一个是实现HTTPS前向转发, 实现在各种情况下弹Portal的功能, 二是针对中国网络特殊情况的各种优化, 实现国际版本的苹果手机和安卓手机也能稳定的连接wifi网络, 正常上网的功能.主要中国的wifi与国际上的wifi有很大的不同, 与美国人民常用的服务器连接不良, 需要进行定制性的代码优化, 这就涉及大量TCP/IP底层的处理, 包括对apple手机的wifi和各种应用的探测包进行单独处理, 实现apple手机和笔记本自动判断该设备的wifi网络internet质量极优, 到美国facebook 之类大陆无法访问的多种应用服务器的带宽极大, 将此wifi设备的无线网络, 在苹果手机的可用无线网络自动排序到第一名, 避免出现苹果手机错误判断需要弹Portal的网络不良导致无法在苹果手机中显示此wifi. 对 安卓手机的类似网络探测包连接Google网络也有各种复杂的处理流程, 避免因为中国大陆对Google全部服务器的拦截, 造成部分型号手机(原生版本安卓)连接wifi后反复掉线的问题, 以及wifi图标显示!的问题, 以及避免原生版本Google安卓判断网络不良等, 实现在无法连接Google服务器的大陆地区, 原生版本的安卓手机也可以稳定的连接此wifi. 三是针对降低Portal服务器端压力的一些优化, 使用keepalive 等技术降低Portal服务器的压力等等.原生版本是C语言的开源wifidog代码, 全部用C++语言重新实现一遍, 采用C++的原因是由于公司有大量的基础库都是C++的, 在这些经过验证的基础库的加持下, 开发速度极高, 稳定性很好, 由于公司有各种C++高性能库加持, C++开发的代码性能比开源C语言版本快N倍, 功能上扩展比较容易, 开发任务紧, 稳定性要求极高, 所有功能短时间内就开发验证完毕了, 累计含公司版权的代码量大约4万行, 其中80%以上是各种自研库代码.C++代码二进制大小是2.4M(ARM)-4.3M(MIPS), 比C语言原生版本的400KB大一个数量级, 静态编译, 主要是libstdc++.a 和libssl.a等库占用的空间, 已经在一些新款Wifi设备上测试使用. 这几款Wifi设备已经在使用512M/1G以上内存, 双核甚至更多CPU, FLash空间很大, 内置linux4.X版本, 嵌入式linux没有使用uclibc, 直接就是glibc, 各种空间浪费, 各种爽, 开发太快太方便了.总之, 如果需要在短时间内开发出来一个数万行代码的稳定版本, 使用C++11几乎是唯一选择, 起码智能指针的应用, 避免了指针的问题, 例如内存泄露,未初始化指针的崩溃等等问题 |
|