逐步实现TCP服务端Step03-4:关于基于共享内存的恢复功能

若不显式销毁或重启系统,进程消亡后,共享内存将一直存在。当挂掉的进程再次被启动时,可基于共享内存中的历史数据继续之前的工作,这就是”恢复“。

要实现这种“恢复”机制,进程在启动的时候,首先要做的是,attach已存在的共享内存而非重建,只有当相应的共享内存不存在的时候才重建。原因很简单,共享内存是存放数据的容器,一旦被重建,数据就没了,也就不可能做恢复操作了。对于这一点 ...


逐步实现TCP服务端Step03-3:封装CodeQueue类

CodeQueue即:code队列,一个CodeQueue实例将在一个由SharedMemory实例所维护的共享内存段上进行构造。CodeQueue依赖于SharedMemory ...


逐步实现TCP服务端Step03-2:封装SharedMemory、SHMFactory类

一个SharedMemory实例对应于一块共享内存,SharedMemory所提供的方法都是针对于这块已被创建的共享内存的。共享内存的创建不应该由SharedMemory来负责,毕竟自己不能创建自己 ...


封装一个SystemV共享内存创建函数

CreateShareMemory具体实现 ...


逐步实现TCP服务端Step03-1:封装TCPSocket类


这是一些枚举所表示的意义 ...


逐步实现TCP服务端Step02-6:两个进程协作

communicator与processor分属两个进程,这个时候需要额外的机制来完成这两者的通信。

这里使用共享内存的方式来实现:

与使用线程协作的主要区别在于,g_c2s_code_queue和g_s2c_code_queue这两个队列占用的是共享内存的空间,需要对共享内存进行管理。

此前的communicator和processor共存于一个进程s中,现在把它俩分开,在两个进程中实现。可以理解为将communicator从s中拆分了出来,做成了单独的进程,把这个进程的名字定为”netio”,它专注于通信。

除了基于共享内存进行交流之外,netio和s再没有其他关系,二者是分别实现的,没有fork操作 ...