6-2 业务逻辑之打通业务处理脉搏实战

一:线程池代码调整及补充说明

支撑线程池的运作主要靠两个函数:pthread_cond_signal(&m_pthreadCond); 触发
pthread_cond_wait(&m_pthreadCond, &m_pthreadMutex); 等待
《Unix环境高级编程》 11章 线程,11.6.6: 条件变量:m_pthreadCond:
条件变量,是线程可用的另一种同步机制,条件变量给多个线程提供了一个会合的场所,条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生;
a)条件本身【while ( (pThreadPoolObj->m_MsgRecvQueue.size() == 0) && m_shutdown == false)】 是由互斥量保护的。
线程在改变条件状态之前必须首先锁住互斥量,其他线程在获取到互斥量之前不会觉察到这种改变,因为互斥量必须在锁定以后才能计算条件;
c++11,也有条件变量的说法 my_cond.wait(…), my_cond.notify_one(…)
大家如果有兴趣可以用c++11多线程开发技术实现 自己的跨平台的线程池代码;
b)传递给pthread_cond_wait的互斥量m_pthreadMutex对条件【 while ( (pThreadPoolObj->m_MsgRecvQueue.size() == 0) && m_shutdown == false)】进行保护的,
调用者把锁住的互斥量传递给函数pthread_cond_wait,函数 然后自动把调用线程 放在 等待条件的 线程列表 上,对互斥量解锁,
这就关闭了 条件检查 和 线程进入休眠状态等待条件改变 这两个操作之间的时间通道,
这样线程就不会错过条件的任何变化。pthread_cond_wait返回时,互斥量再次被锁定;

二:线程池实现具体业务之准备代码

(2.1)一个简单的crc32校验算法介绍

CCRC32类:主要目的是对收发的数据包进行一个简单的校验,以确保数据包中的内容没有被篡改过;
Get_CRC():给你一段buffer,也就是一段内存,然后给你这段内存长度,该函数计算出一个数字来(CRC32值)返回来;

(2.2)引入新的CSocket子类

真正项目中要把CSocekt类当成父类使用,具体业务逻辑代码应该放在CSocket的子类中;
threadRecvProcFunc()收到消息之后的处理函数;

(2.3)设计模式题外话

有很多人善于,乐于:抽象;把一个一个小功能封装成一个一个类;往设计模式上套 进行所谓的面向对象程序设计;
最能体现面向对象的 多态【虚函数】;
写程序:每个人有每个人的喜好;老师最喜欢的就是简单粗暴有效的程序设计方式,完全不喜欢动不动就封装一个类的这种写法;
a)类太多,别人理解起来就非常困难,另外类太多,对程序效率影响很大;
b)几十万,上百万上代码,里边很多部件需要灵活调整,经常变动,不稳定的部分,才需要抽象出来,用虚函数,通过设计模式来灵活解决;
不要乱用设计模式,不要乱封装;

(2.4)消息的具体设计

为了能够根据客户端发送过来的消息代码 迅速定位到要执行的函数,我们就把客户端发送过来的 消息代码直接当做 一个数组的下标来用;
最终认识:咱们的服务器开发工作【业务逻辑】,主要集中在三个文件中:ngx_logiccomm.h,ngx_c_slogic.cxx,ngx_c_slogic.h

三:threadRecvProcFunc()函数讲解

四:整体测试工作的开展

服务器开发工作,公司 配备专门客户端开发人员来开发客户端工作;
c/s配合工作,配合指定通讯协议;协议的制定一般是 服务器程序员来主导;
(1)确定通讯格式是 包头+包体,包头固定多少个字节,这种规则是服务器端 来制定并在开发一个项目之前,要明确的 和客户端交代好;
要求客户端给服务器发送数据包时严格遵循这种格式;
(2)注册,登录,都属于具体的业务逻辑 命令;这种命令一般都是由服务器牵头来制定;

(4.1)不做背锅侠

服务器开发难度往往比客户端大很多,责任也重很多;要求也高得多;
讲清楚:服务器端要负责通讯协议的制定工作,以免跟客户端推诿扯皮
服务器有能力站在客户端的角度去制定各种通讯协议;
商量,共同指定协议和数据结构;共同制定协议;

(4.2)客户端测试代码的调整

服务器端有责任把crc32算法给到客户端;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值