网络与多线程的设计例子

上一篇的《网络与多线程设计模式》讲的是一些设备上的纯理论的东西,本篇将介绍一个本人写的使用EPoll+TcpServer+多线程的开源库,已在https://bitbucket.org/johnson_he/epolltcpserver中供开源下载。

该库使用了Qt的工程方式进行封装(实在不想写configure),里面的log也使用了log4Qt的方式进行,如果不想使用Qtcreator的话,可以自行引用tcpserver文件夹里面的所有文件即可。

使用Qtcreator的好处是,里面的demo是用Qt写的,当然Qt就是C++,应该不难看懂。

该库的实质源码其实并不多,使用者只需要继承AbstractTcpHandler类来实现自己的服务功能,然后用该实例化的子类、监听端口号、线程数去初始化EpollTcpServer对象即可。

AbstractTcpHandler类的每个接口函数的功能,可看该类头文件的注释。实例化自己的功能类时,需要注意的是,当你初始化EpollTcpServer对象时指定的线程数大于1时,该类会被多个线程同时调用,所以,设计该类时,需要保证里面的资源的线程安全。

当初始化完EpollTcpServer对象后,调用其startServer()接口里,将会正式启动线程进行网络监听操作,并将监听到的Tcp连接放入epoll中做事件监听,当有事件到来时,调用你实例化的功能类进行数据的处理,如下图所示。

欢迎通过QQ:85021824进行交流。

来自为知笔记(Wiz)

时间: 2024-11-05 18:39:04

网络与多线程的设计例子的相关文章

iOS开发网络篇—多线程断点下载

iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始,创建一个和要下载的文件大小相同的文件(如果要下载的文件为100M,那么就在沙盒中创建一个100M的文件,然后计算每一段的下载量,开启多条线程下载各段的数据,分别写入对应的文件部分). 项目中用到的主要类如下: 完成的实现代码如下: 主控制器中的代码: 1 #import "YYViewControl

高性能、高并发网络通信系统的架构设计

1 引言 随着互联网和物联网的高速发展,使用网络的人数和电子设备的数量急剧增长,其也对互联网后台服务程序提出了更高的性能和并发要求.本文的主要目的是阐述如何进行高并发.高性能网络通信系统的架构设计,以及这样的系统的常用技术,但不对其技术细节进行讨论.本篇只起抛砖引玉的之效,如有更好的设计方案和思路,望您共分享之![注:此篇用select来讲解,如想用epoll,设计思路是一致的] 我们首先来看看课本或学习资料上关于处理并发网络编程的三种常用方案,以及对应的大体思路和优缺点,其描述如下所示:  

Windows多线程多任务设计初步(转)

Windows多线程多任务设计初步 [前言:]当前流行的Windows操作系统,它能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的应用软件无一不是多线程多任务处理,单线城的软件是不可想象的.因此掌握多线程多任务设计方法对每个程序员都是必需要掌握的.本文针对多线程技术在应用中经常遇到的问题,如

架构风格与基于网络应用软件的架构设计(一)

作者:Roy Thomas Fielding 译者:李锟 论文摘要 Web(万维网,英文全称World Wide Web,简称Web)的成功,很大程度上是因为其软件架构的设计满足了拥有互联网规模(Internet-scale)的分布式超媒体系统的需求.在过去10年间,通过对定义Web架构的规范所做的一系列修改,Web以迭代的方式不断地发展着.为了识别出Web需要改善的那些方面,并且避免对其进行不必要的修改,需要一种现代的Web架构模型,用来指导Web的设计.定义和部署. 软件架构方面的研究探索的

python多线程爬虫设计及实现示例

爬虫的基本步骤分为:获取,解析,存储.假设这里获取和存储为io密集型(访问网络和数据存储),解析为cpu密集型.那么在设计多线程爬虫时主要有两种方案:第一种方案是一个线程完成三个步骤,然后运行多个线程:第二种方案是每个步骤运行一个多线程,比如N个线程进行获取,1个线程进行解析(多个线程之间切换会降低效率),N个线程进行存储. 下面我们尝试抓取http://www.chembridge.com/ 库存药品信息. 首先确定url为http://www.chembridge.com/search/se

boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。

1.实现多线程方法: 其实就是多个线程同时调用io_service::run for (int i = 0; i != m_nThreads; ++i)        {            boost::shared_ptr<boost::thread> pTh(new boost::thread(                boost::bind(&boost::asio::io_service::run,&m_ioService)));            m_l

C#多线程的简单例子

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; //using System.Threading.Tasks; using System.IO; using System.Collections; namespace ConsoleApplication2 { class program { static void Main(

多线程通信小例子——New生产者消费者

多线程通信小例子--New生产者消费者

大型企业网络系统集成方案如何设计?

网络系统集成是企业实现无纸化办公和即时通讯办公的基础建设,在以生产效率为核心竞争力的市场中,企业想要快速获取信息并有效提高企业工作效率及业务能力,企业网络系统集成是必不可少的,由于目前网络技术复杂多样化,企业网络系统集成不再那么简单,必须经过详细.周密的规划设计,才能确保网络系统达到目的,那么企业网络系统集成需遵循哪些原则?企业网络系统集成方案又该如何设计呢? 网络系统集成方案设计原则 在企业网络应用的发展进程中,网络系统集成方案的规划与组建是企业网络应用的重要基础部分,因此网络系统集成方案需以