C++ 游戏服务器 后端编程【1】 纯心情总结

来到新公司1个月了,在这里总结一下一个月以来的工作经验以及遇到的问题。

首先之前做的是Qt C++ ,图形界面编程,而且算是自学,没有STL使用经验,没有日志管理,没有特别在意使用面向四大特性,虽然Qt把函数以及面向对象的特性封装得很好,但是我资历尚浅,且没有大型软件编写经验,写出来的东西只能说完成了基本的功能,封装性,可继承性,可移植性,鲁棒性,调试方便程度等,现在想想,以前的代码确实是一坨屎。

其实给之前写的那些软件的代码整体很糟糕这件事情我很早之前就已经意识到了,但是无奈之前的公司赶鸭子上架,各种新功能、新协议等一个星期一变,没有时间去把项目改造,新起的项目时间太赶,沿用之前的设计也只能勉强赶得及完成,所以也没有把自己的想法加入到其中。不过我在离职前一个月把其中一个软件的串口、UDP等通信功能改写了一下,把最基本的通信功能封装好了,之后还是可以重复被调用的,可惜时间不够,之后就提出离职了,不然还有很多功能我想要进行大改,聪明的做法应该是自己造轮子,把基本的功能都做成耦合性较低的底层类,充分考虑MVC设计方法、设计模式,这样的话后期如果软件做改动,或者是新起一个类似的项目,制作软件的时间都会大大降低。

从Windows程序设计转行到游戏后端,其中的转变还是非常大的,首先就是编译环境,之前用的是Windows+Qt creator,现在是Linux+eclipse,就我接触到的难度上来说,游戏后端编程比Windows程序设计要更难一些,一部分的原因可能是因为从我学编程以来,接触到的编程环境都是在Windows下的,虽然大学课程有学Linux和相关编程,但是毕竟没有深入,目前的游戏后端编程需要对Linux指令较为熟悉,在Linux下调试程序需要用到Linux指令,让我吃了很多苦头,第二是使用eclipse进行C++的编程也需要一段时间来熟悉,eclipse这里面确实很多雷,一不小心就又是花一整天时间去排雷,第三是之前的项目都是我从头到尾做下去的,软件就算写的不好,但是需要功能添加或者改动,我都了如指掌,就算用最愚蠢最笨的办法也是可以解决的,但是现在我接手的是别人已经花了好几年差不多做完了的一个系统,复杂程度比起之前一个月交初版的程序简直上天,随便改个功能,都需要多方确认,而且功能体系错综复杂,刚接触的时候真的是摸不着头脑,幸亏现在的上司是个脾气很好的人,同事也非常耐心包容,我很多不懂的问题,都得到了他们耐心的教导解决,让我得以熟悉这个系统,后面的工作只能说继续努力,心情说完了,下面是正文。

目前接触到的新的编程方式(有些可能不准确):
1、利用脚本读取cmd.json,自动生成代码
2、利用宏定义##和inline自动生成相关函数、变量等
3、泛型编程
4、智能指针(shared_ptr)
5、引用传递
6、数据流的读写
7、枚举变量、struct类型(继承)等应用
8、虚函数与纯虚函数定义、继承、使用、多继承等
9、各个project共享通用common函数功能并互相调用彼此的功能
10、STL库(线性表vector,迭代器iterator等)
11、断言assert
12、SDK调用与封装
13、方法覆盖(参数个数不一样、参数类型不一样等)
14、Linux 相关指令使用与eclipse环境下的C++编程
15、类的多态性实现(父类指针指向子类【或者描述为:允许将子类类型的指针赋值给父类类型的指针】)
16、使用设计模式且代码遵守设计原则

以上列出的内容,其实在C++ primer、effective C++等书都有提到或有详细讲解,这里应该要批评一下自己,没有静下心来好好把这些书看一下,每次都是需要用到某些东西的时候才去翻看特定内容,导致现在基础不是很扎实。
下面列举一些遇到的问题:
1、对Linux指令不熟悉,一些常用但不是很熟的指令列举如下
(1)【拷贝文件夹】cp -r 源文件/. 目标地址 cp -r 源文件/* 目标地址
(2)【删除类似文件名的文件】rm -f *.log*
(3)【查看日期时间】date
(4)【查看日期时间——指定日期格式】date "+%Y-%m-%d %H:%M:%S" 显示:2013-02-19 13:14:19
(5)【修改系统时间】date -s "2017-8-25 13:52:59" 修改后会默认显示修改后的当前时间
(6)【查看详细进程】ps aux
(7)【查看类似名字的进程】ps aux | grep Server
(8)【修改文件权限】chmod 755 FileName
(9)【修改文件夹权限】chmod -R 755 FolderName
(10)【改变文件权限所有者】chown -R Owner:Group FileName
(11)【查看文件详细信息】ll
(12)【查看当前路径】pwd
(13)【显示指定文件末尾】tail FileName
(14)【查看程序崩溃记录】gdb filename core
2、log4cpp使用技巧
(1)使用 log4cpp打印字符串的时候,不能直接用string格式,需要调用c_str()兼容C语言格式;
(2)不能把所有的输出信息都设置成info或者debug之类的,需要将日志的级别分好类,出错了一定要用error,普通调试就用debug,使用info的情况一般为打印一些必要的提示, 比如加载情况, 运行情况。
其他遇到的坑一般都是具体项目相关,这里就不列举了,之后会多看一下C++和Linux的书籍,如果有新的体会都会写到这里。

你可能感兴趣的:(个人)