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

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

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

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

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


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

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


逐步实现TCP服务端Step03-10:封装Message类

基层工作由MessageHead,Codec和MessageBody负责完成。Message类构建于它们之上。

  • Encode:这是编码操作的总入口 ...


逐步实现TCP服务端Step03-9:MessageBody的使用及改进

假设我们设计了一组向server请求账号信息的消息,格式如下:

消息首部不展开说明。client向server发送request消息,告诉server待查询账号的ID,以及能证明client已登陆的token ...


逐步实现TCP服务端Step03-8:封装MessageBody类

MessageBody是消息体类,通过继承Codec类,获得Encode/Decode能力。现实中会存在各种各样的消息(体),MessageBody显然是它们的一般形式。

MessageBody具备了编解码能力,但具体编解什么内容,需要在具体的消息体里完成。这样的话,具体的消息体中应该有两个方法用于启动编解码操作,比如StartEncode、StartDecode ...


逐步实现TCP服务端Step03-7:封装Codec类

Codec提供了一套Encode/Decode方法供MessageBody使用。MessageHead类并未使用Codec提供的服务,而是内置了Encode/Decode方法。消息头与消息体不同,消息头是公共部分,不会轻易改变,消息体则与具体的业务相关,结构不固定,应把他俩区别处理。

对于消息体的多样性,可以通过重载’<<‘和’>>’运算符来实现Encode/Decode,编解码时直接在运算符后面追加字段就行了。

属性 ...