
网络
文章平均质量分 79
silence1772
为者常成,行者常至
展开
-
C++网络编程实战项目--Sinetlib网络库(1)——概述
前言这个网络库是我一直想完成的一个个人项目,到现在也只能说完成了基础的一部分,还有很多功能没完成。因为想往linux c++后台方向发展,所以就打算实现一个网络库,来串联学到的知识,包括APUE、UNP、《Effevtive C++》等等可以说是该方向必看的书籍。暑假的时候我照着陈硕先生的muduo网络库模仿了一个,学到了很多,但对很多细节不解,所以现在就想重新实现,同时也熟悉整个开发流程。项...原创 2018-10-22 21:03:32 · 3582 阅读 · 1 评论 -
C++网络编程实战项目--Sinetlib网络库(4)——线程池和整体框架
线程池我们已经有了一个Looper类表示事件循环,且每个线程只能有一个Looper,现在我们把Looper和线程绑定在一起,成为一个新的类LooperThread创建该类也就创建了一条新线程,然后该线程上运行着Looper。我们把这些线程都交由线程池管理,也就是ThreadPoolReactor实际上这并不是纯粹的Reactor模式,更应该称之为半同步半异步模式。我们有一个主线程以及线程...原创 2018-10-25 14:34:01 · 1407 阅读 · 0 评论 -
C++网络编程实战项目--Sinetlib网络库(2)——I/O复用与事件分发
从这一节开始讲解网络库代码的实现,在触及完整的运行逻辑之前,我们先来了解底层的Reactor模式关键结构。事件分发让我们先理清一下事件分发的概念。在linux系统中,信奉着一切皆文件的思想,对于我们网络库使用的socket套接字,也是用文件描述符来表示。现在假设我们有一个socket,这个socket连接了一个客户机,那么现在我们想象出下面这一场景:可以看到,socket相当于一个听筒,客户...原创 2018-10-23 20:33:08 · 1368 阅读 · 0 评论 -
C++网络编程实战项目--Sinetlib网络库(5)——HTTP服务器设计与实现
Sinetlib内嵌了一个简易的HTTP服务器,实现了url匹配和静态资源访问,可以使用作为RESTful API的后台。整体架构整体是建立在网络库连接的抽象上的,但服务器接收到消息,将其解析成HTTP Request,然后通过路由器进行匹配,得到匹配的Hander进行处理,如果没有匹配则直接返回404 Response。处理完生成对应的Response发送回去。解析对于http请求的解...原创 2018-10-26 22:27:06 · 2132 阅读 · 0 评论 -
C++网络编程实战项目--Sinetlib网络库(3)——事件循环与跨线程调用
上一篇文章讲了Reactor模式的关键结构I/O复用和事件分发,现在我们来关注一下它们的使用。事件循环我们已经实现了一个Epoller类来实现I/O复用,具体的使用方法就是Epoller::Poll()函数等待事件的发生,该函数有一个超时时间,超过这个时间即使没有事件发生也会返回,那么我们如何让它一直工作呢?很明显就是使用while循环。一个事件循环的大概逻辑如上图,就是循环反复地调用Po...原创 2018-10-24 13:30:15 · 2623 阅读 · 3 评论