逐步实现TCP服务端Step04-3:封装netio主逻辑

之前对代码做整理封装的时候,并没过多地考虑netio,当时的关注点在s上,只对s做了封装,现在对netio做类似的处理。

s与netio的主逻辑中有不少类似的地方,如使用共享内存,操作c2s_code_queue和s2c_code_queue等等。这些基础操作应被整合在Control类中,由于Control这个名字在处理s的时候已被使用,这里需要改下名字,将对应于s的Control类改为SControl,对应于netio的Control类命名为NControl,而Control则为它们共同的父类。

无论s还是netio,大流程可概括为三步:初始化 ...


逐步实现TCP服务端Step03-15:小结

这是一个里程碑,到目前为止,基本的构件都已实现,为下一步的扩展打下了基础。

所谓的“扩展”是指把对单个客户的服务扩展为对n个客户,目前这个版本只针对一个客户。

再明确一下目标,我们要实现的是一个暂时不关注具体业务的基于TCP连接的后端系统。所谓的“不关注具体业务”,就是说要做的“抽象”一些。它更像是一个骨架,如果需要的话,可以把具体的业务逻辑填充进去 ...


逐步实现TCP服务端Step03-14:整理s的主逻辑

主逻辑是指main函数中的大流程。经过一系列变化,目前的s已变得比较臃肿,散落的变量和全局函数使代码变得不易维护,需要对主逻辑进行整理。

定义Control类来整合主流程用到的函数和变量:

这个地方没什么好说的,就是把现有的那些函数和变量都放到Control中 ...


逐步实现TCP服务端Step03-13:消息队列相关

消息队列就是存放消息的队列,而消息的表现形式为“对象”,也就是说这个队列实际上是消息对象队列。

我们希望队列能更通用一些,不仅可以存放消息对象,也可以存放X对象,Y对象和Z对象。Object是它们的一般情况。

对象与一般的内置类型不同 ...


逐步实现TCP服务端Step03-12:改进

回忆一下字节流,code和消息之间的转换过程:

图中使用的函数名可能与代码中的不完全一样,这里的名字主要是描述当前在做的事情。

Message系列的类不会用在netio中,因为netio只负责通信,不考虑业务。后面的s需要把code解析成消息进行处理。

在s中又维护了一个叫做code_queue的code队列,维护这个队列是为了 ...


逐步实现TCP服务端Step03-11:让Codec支持字符串处理

在封装Codec的时候,并未考虑对字符串的编解码操作,这里做一下补充。字符串不像二进制数值,其长度不固定,需要一个额外的字段来记录字符串的长度。
新版Codec类图 ...