2021.5.27随笔(毕设做完)
昨天终于做完了毕业,这个毕业设计做了挺久了。从去年11月开始把题目确定了。11、12月份看muduo网络库的时候,还信誓旦旦,觉得能做web端和qt端。觉得它会是非常强大的一个毕设。1月、2月一边学车,一边设计,静不下心来写代码,也不想写,后来就想做一个端就行了,一开始想做web端,毕竟有个http的模板,而且大多数博客项目都是web端。后来又做不下去,直到去了深圳,开始工作,才想着我有些好高骛远,能做出来就不容易了,于是开始每天都想一点,越想越失望,可突然有时候就会往前想出一点东西,最后,结合了公司的项目,最终定下了方案。决定自底向上编程,以数据为中心。在深圳也才只把数据库写好了,当然后来又慢慢经过了多次改动。4.14号回到学校,我首先开始着手mysql的连接,能够测试从数据中读取数据,并做了二三十个mysql的函数封装,增删改查一些表。将其存入结构体数组。
接着看了CJSON库,一点一点学习,把结构体转化为json,后来又支持结构体数组,支持反向转换,用于前后端黑盒传输数据。到这一步,我想到我已经建起两层了,mysql层、json层,之后添加了协议,协议能够有个长度、有个状态、有个类型足够,当然一开始还设计有CRC和id作为会话层,后来还是一切从简了。一层一层测试,这样我就有了整个的黑盒数据,分三层封装。在前端解码也是逆序解就行,重用后端的代码。
之后利用之前写过的多线程并发服务器的几百行代码想让黑盒数据完成包的传输,却没想到不是那么容易,依次解决了:后端到linux下的client程序的连通,能够在client中接收到json,然后是非阻塞的while写法、epoll et与lt的选择、一开始是et,半个月后才发现et存在的问题,“粘包”导致必须要全部读出传来的数据,所以后端选择了lt。之后转战前端qt。前端界面之前1、2月的时候有简单画过,所以这时候我就简单修改了,针对tcpSocket先联通了网络,后来经过学习ReadyRea信号,才能接收到数据,没想到还是遇到了粘包问题,最后还是躲不过要设计buffer。看了些课程解决了,这个粘包问题,一开始是没发现的,就是有时候会收不到最后一个包,但点击按钮,下一次却最先接收到最后一个包了。隔了一个多月才发现,十几天前解决了这个问题。之后逐渐设计前端,针对按钮写槽函数,槽函数中发送请求,在ReadyRead槽函数中接收数据,并处理。期间还解决过buffer不够大溢出的问题、数据库字符集的问题,字符集还是全用utf8好,后来的文章字段,想用base64编码,防止特殊字符不能存储,又使用了utf8mb4,uniconde。前后端还得同意,并且任然无法解决某些特殊字符。现在还是一个bug。其他就是一些业务逻辑上的问题,空指针,内存泄漏,未关闭连接、资源浪费等,最终代码与论文一起于昨天完成,鏖战了很多个日夜,每天7点半起,只有中午晚上休息会,晚上又要熬到凌晨1点,改bug改论文,终于结束了,我要休息休息,整理整理,把论文剩下的问题和ppt解决了,结束这个事情,开始想我自己的事情了。