linux服务端编程
文章平均质量分 92
Shreck66
这个作者很懒,什么都没留下…
展开
-
linux服务器编程之高效事件处理模式
当前网络主的设计模式共有俩中,即Reactor模式和Proactor模式。同步I/O模型(select,poll,epoll等)用来实现Reactor模式,而异步(aio_read或aio_write等)用来实现Proactor模式1.Reactor模式Reactor模式的基本设计思路是主线程只负责对I/O事件的监听,而不负责对I/O的读写,如果有I/O事件发生,则主线成会将该事件通知给工作线程,由原创 2015-09-27 13:45:42 · 1921 阅读 · 0 评论 -
muduo网络库脉络分析(2)
因为此篇博文是上篇博文的延续,所以读者在阅读此时最好能先去看一下muduo网络库脉络分析(1)Channel类其实在上篇博文讲完Acceptor类之后,我因该按照流程顺序接着讲TcpConnection类的,但是因为TcpConnection中包含一个很重要的类Channel类,之前讲时也都有设计Channel类,但是我只是笼统的描述那是对事件的一个抽象,所以这里将Channel类,既可以帮助大家理原创 2016-03-21 17:44:35 · 1657 阅读 · 2 评论 -
muduo网络库脉络分析(1)
去年看muduo网络库时没有总结博文,导致前段时间用muduo时发现好多东西都模模糊糊,于是就花时间又一次翻阅了muduo源码,并用此篇博文记录下其网络库整体脉络,以便是后来者入手起来更方便,同时也可用作自己以后复习的资料1.如何入手muduo库其实在这之前也没有尝试去分析一个网络库的总脉络,更没有去尝试把它以博文的形式总结下来。那么我们该如何尝试去分析这样一个网络库的整体脉络呢?其实我有想过将mu原创 2016-03-21 13:54:42 · 2621 阅读 · 6 评论 -
SCTP协议详解与实例
1.SCTP是什么?只要是接触过编程的人,当你问他传输层都有哪些协议?我想几乎很多人会说TCP,IP协议而很少有人知道SCTP(流控制传输协议)这个和上述俩个协议具有相同地位的协议。 SCTP提供的服务与TCP,UDP类似,或者甚至可以理解为其是TCP与UDP协议各自优点的组合后的产物。2.SCTP的特点(1)SCTP连接的建立SCTP协议建立连接可调用int sctp_connectx(int原创 2016-03-31 18:24:13 · 28208 阅读 · 3 评论 -
解密:protobuf协议序列化后的变体
1.protobuf是干什么的protobuf为google公司出品,其全称为Protocol Buffers。关于其是什么网上一搜一大堆,但是初学者往往还是看的晕头转向。其实简单的概括protobuf的功能无非就是对结构化数据串行化。举个简单的小例子struct Person{ int number; //编号 char name[100];原创 2016-03-18 20:15:10 · 8030 阅读 · 1 评论 -
一个高效的异步日志
假如让你自己去写一个日志程序,我想最原始且简单的想法因该是,首先将要写入日志文件的内容转化为字符串,然后调用write系统调用将其写入文件。这种实现方法的确就是我们程序最原始的日志方法。这种做法无疑是十分低效的,那么如何让我们的日志能够高效起来呢?本篇博文就是要给大家分享一种高效的日志–异步日志1.异步日志要实现什么?前言中我有告诉打下那种最原始且简单的日志方法很低效,那么它低效在什么地方了呢?原创 2015-12-27 19:42:12 · 9301 阅读 · 3 评论 -
走进nginx事件驱动模型
最近在看阿里陶辉前辈写的”深入理解nginx”中的nginx的事件模块。之所以想看这块内容,是因为nginx可以处理庞大的并发连接,想看看支持其背后的事件驱动是如何构建的这篇博文我也不想贴代码什么的整一堆东西来讲述nginx事件驱动,一来我未必理解的那么透彻,而来这样反而更不易阅读者快速的掌握知识,所以我会简单的将几个我认为可能会对我之后的服务器程序开发中有所帮助的几个知识点简单论述nginx的ep原创 2016-01-13 11:58:52 · 5268 阅读 · 1 评论 -
fastcgi协议分析与实例
1.序言最近在用c++实现一个简易web服务器。在实现之前大体理了一下一个web服务器主要咋样实现。当时单纯的认为只需要将浏览器发来的http请求解析,找到对应的文件,然后给浏览器一个响应,把其要获取的文件发给它就完事。可是写了没几天就遇到了瓶颈。因为我们的浏览器并不能解析动态的php文件,那么如果获取的http请求的请求文件为.php文件我们该杂么办呢?2.将.php转换为.html的php-fp原创 2015-12-19 00:50:01 · 10476 阅读 · 7 评论 -
浅析linux服务端socket编程
记得大一第一次接触linux服务端编程时,当时看的1.Socket接口socket接口用来创建一个套接字描述符,函数定义如下int socket(int domain,int type,int protocol);//成功返回文件描述符,失败返回-1参数介绍: .domain指定使用哪个底层协议,PF_INET(ipv4) PF_INET6(ipv6) .type指定协议的服务原创 2015-12-01 00:46:46 · 1944 阅读 · 4 评论 -
muduo的reactor模式基本实现
这几天一直在看muduo的Eventloop(事件循环)这一块的源代码,感觉里面有好多东西例如:智能指针的使用,将eventfd,timerfd等linux新性能运用进去,C++一些容器的合理使用,还有如何能在多线程情况下减少锁的使用等都是我们应该学习的东西。关于muduo实现的reactor模式,有三个关键的类.事件分发器类Channel.封装了I/O复用的Poller.定时器接口类Timer原创 2015-11-14 23:11:10 · 2924 阅读 · 0 评论 -
linux新增特性timerfd
1.为什么要加入此定时器接口linux2.6.25版本新增了timerfd这个供用户程序使用的定时接口,这个接口基于文件描述符,当超时事件发生时,该文件描述符就变为可读。我首次接触这个新特性是在muduo网络库的定时器里看到的,那么新增一个这样的定时器接口有什么意义呢?要说明这个问题我得先给大家列举一下linux下能实现定时功能的各个接口,然后通过逐一比较来说明原因linux下的定时接口主要有如下几原创 2015-11-09 21:29:19 · 4875 阅读 · 3 评论 -
muduo网络库中buffer的设计
1.为什么非阻塞网络编程中应用层buffer是必须的非阻塞I/O(在这里可以理解为非阻塞I/O加T/O复用)的核心思想就是避免将当前线程阻塞在I/O系统调用上,这样可以使我们的I/O线程只阻塞在I/O复用函数上(epoll_wait或poll,select)使其能够服务更多的连接socket那么如何才能做到这一点呢?这里我们就需要实现应用层的输入输出buffer(1)什么情况下用到output b原创 2015-11-03 16:41:45 · 3796 阅读 · 2 评论 -
MySQL数据复制原理及实践
##1.数据复制概述####1.1数据复制定义数据复制使一个服务上的数据与另一个服务上数据保持同步####1.2复制用途数据分布负载均衡备份高可用和故障切换MySQL升级测试##2.数据复制工作原理####2.1复制工作流程介绍(以主从架构为例)MySQL复制原理比较简单,其核心工作示意图如下:主库把更新操作记录在二进制日志文件中备库上的I/O线程收到主库的更新事...原创 2018-11-07 17:35:27 · 370 阅读 · 0 评论