基于Libevent的个人对服务器结构的初步理解

本篇是我个人对单个TCP服务器开发的理解。网络模型基于Libevent,如果大家觉得有什么不妥的地方,欢迎指正,促使我提高,谢谢大家!

先上图:

说明:

1.Libevent用于网络控制,包括客户端的连接与断开,网络数据的接收与发送。

2.客户端连接之后,生成一个对应的客户端对象,并交给客户端管理对象去管理。

3.Libevent数据缓存池默认只有4K的大小,而客户端一个数据包很可能不仅仅4K,所以收到的数据,先拷贝到客户端自己保存。

4.客户端在收到完整的数据包后,将消息形成对应消息子类对象(MsgBase是消息基类),然后把消息对象加入到消息队列(生产者)。

5.开辟一个线程,只做把消息队列里的消息分发给线程池里面的线程(消费者)。

6.线程池里的线程这时候要处理具体的消息,这里有些消息可能耗时严重,利用这种处理方式,可以实现先来的消息先处理,但是先处理的消息如果耗时严重,却不会成为后来消息的延时点。

7.消息处理后,就通过Libevent把结果转发出去。

这个图里面还有好多没有详细说明,主要是一些异常处理和共享资源的问题:

1.如果消息队列中有某个客户端的消息还没处理,那么此时客户端却异常断开连接了。

2.消息队列存在多个线程共同操作的问题。

3.没有做分包发送的详细说明

(后续持续更新,欢迎大家斧正!)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值