使用QTcpServer创建一个简单的服务器程序之二:多线程服务器(2)-功能划分

多线程服务器程序有两种常见的实现方式。第一种是为每个客户端分配一个线程,这种方式显然不太合理,也十分消耗资源。第二种就是用线程池来管理客户端,线程池中的每个线程负责多个客户端,本文就是采用的第二种方式。

根据我们要实现的功能,现在来看看可能会需要哪些类,这些类承担了什么样的功能。

1,线程类---MyThread

这个类是用来真正处理客户端消息的,并且每个线程还需要维护一个客户端的链表。

2,线程池类---MyThreadPool

这个类是用来管理线程类的,线程池中的线程数量可以设为固定个数,也可以根据CUP核心个数来设置。它需要有开启和关闭线程池的方法,并且要有一个方法能够得到当前线程池中拥有客户端数量最少的那个线程(防止某个线程中拥有的客户端数量太多,分配的不均匀),最后需要一个分配方法,把客户端放入正确的线程中并返回这个客户端。我们要拿这个客户端来通信的。

3,服务端类---MyTcpServer

这个类就是从QTcpServer继承过来的类。它需要重写incomingConnection函数,以便把监听到来连接的客户端放入线程池中。因此这个类只需要监听是否有客户端来连接,然后把来连接的客户端丢入线程池即可。所有和客户端通信的事都交由线程池来完成。当然它也可以维护一个客户端的链表,用来在主界面上显示当前连接的客户端。

4,客户端通信类---MyTcpSocket

这个类就是从QTcpSocket继承过来的类。它负责具体的客户端信息。我们在界面上展示客户端信息,因此这个类需要提供当前客户端的IP地址和端口号等信息。

5,界面类---MyNetWork  用来展示这个简单的服务器

有以上几个类就可以搭建一个简单的服务器程序了。

用图来表示可能更清楚一点:

好了,准备工作都做好了,现在可以开始动手写了!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值