网络编程学习
学习网络编程的一些练习,并非纯原创
AlwaysSimple
如果有问题,请联系:gyphust@qq.com
展开
-
muduo多线程异步日志学习
muduo多线程异步日志学习以下为个人理解,可能存在错误之处。\color{red}{以下为个人理解,可能存在错误之处。}以下为个人理解,可能存在错误之处。发送方(前端)当新来一条日志,发送方的处理代码如下;void AsyncLogging::append(const char* logline, int len){ muduo::MutexLockGuard lock(mutex...原创 2020-01-14 22:30:14 · 302 阅读 · 0 评论 -
RALL机制的线程锁
1.RAll机制 RAII 是 resource acquisition is initialization 的缩写,意为“资源获取即初始化”。它是 C++ 之父 Bjarne Stroustrup 提出的设计理念,其核心是把资源和对象的生命周期绑定,对象创建获取资源,对象销毁释放资源。在 RAII 的指导下,C++ 把底层的资源管理问题提升到了对象生命周期管理的更高层次。2.RAll机制的...原创 2020-01-10 15:05:53 · 1163 阅读 · 0 评论 -
Web服务器——HTTP状态机解析
Web服务器——HTTP状态机解析程序说明主要练习HTTP解析的状态机的使用。接收一个客户端请求,判断是否是一个正确的GET请求,并解析出相应字段。运行方法编译g++ main.cpp -o main直接运行也可以,默认ip为127.0.0.1,默认端口为8888运行curl 127.0.0.1:7777/index.html运行结果:客户端发起请求:# 方式1:命令行...原创 2019-12-18 20:05:58 · 16967 阅读 · 7 评论 -
服务器框架
服务器框架一、两种高效的事件处理模式 服务器程序通常需要处理三类事件:I/O事件,信号和定时事件。后面会一次介绍。 这一节先介绍两种高效的事件处理模式:Reactor(同步I/O模型)和Proactor(异步I/O模型)。Reactor模式描述:Reactor模式,它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程(逻辑单元)。...原创 2019-12-17 14:17:13 · 708 阅读 · 0 评论 -
基于STL的小根堆定时器实现(C++)
基于STL的小根堆定时器实现(C++)详细内容参见:《Linux高性能服务器编程》第11章 定时器。该书我已上传到CSND:https://download.csdn.net/download/qq_34039018/12035959下面谈的是个人理解,观点不一定对。 小根堆定时器的优点如下: 1. 添加时间复杂度为O(1); 2. 删除时间复杂度为O(1); 3.执行一个...原创 2019-12-17 11:39:20 · 4525 阅读 · 3 评论 -
时间轮定时器的实现(C++)
时间轮定时器的实现(C++)写在前面(个人) 本文主要介绍下时间轮定时器的实现,《Linux高性能服务器编程》书中第11章内容。 在学习了升序定时器链表后,其实对定时器的大概思想就算有初步的理解了,包括后面的最小堆定时器也只是进行优化。 回到时间轮定时器,它主要解决的是升序链表插入效率比较低的问题,根据相关链表算法的理论,因为在有序链表插入节点的时间复杂度为O(n),而且是单链表,意...原创 2019-12-16 18:45:21 · 5147 阅读 · 0 评论 -
升序链表定时器的实现
程序说明程序功能服务器使用epoll模型,采用双向升序定时器链表,超时时间设置为5秒,意思是每隔5秒程序发出SIGALRM信号,当信号出现时,将超时标志timeout置为true,但并不立即处理超时函数,而是优先处理其他连接,最后进入timer_handler函数,然后在tick()中依次遍历链表中的节点,与当前时间进行对比,如果超时则进行超时处理函数cb_func,在cb_func中,将超时...原创 2019-12-16 13:00:51 · 560 阅读 · 2 评论 -
socket程序退出后端口依然被占用问题的解决
问题描述在进行socket编程时经常会遇到一个问题,当服务器端程序因为各种各样的原因退出后,再次启动经常会出现端口被占用的问题,有时可以通过查看占用端口的程序,然后杀死该进程的方式解除端口的占用,但是有时候端口处于timeout_wait状态,无法通过杀死进程的方式解决。解决方式(推荐方法2)方法1.查看并杀死占用端口进程,以8888端口为例:# 获取端口pid lsof -i:88...原创 2019-12-16 09:56:17 · 11661 阅读 · 1 评论 -
网络编程中的惊群效应——2
网络编程中的惊群效应——2备注:此文非原创,仅作为学习笔记,引用的博客链接在最后给出。1. 操作系统的惊群 操作系统中的惊群:在多进程/多线程等待同一资源时,也会出现惊群。即当某一资源可用时,多个进程/线程会惊醒,竞争资源。 网络编程中的惊群种类:accept惊群epoll惊群nginx惊群线程池惊群2. 惊群的影响惊醒所有进程/线程,导致n-1个进程/线程做了无效的...原创 2019-12-14 22:17:49 · 373 阅读 · 0 评论 -
网络编程中的惊群效应——1
网络编程中的惊群效应参考博客:https://www.cnblogs.com/Anker/p/7071849.html 惊群效应:简单的说就是多个进程同时等待网络的连接事件,当真正来了一个连接的时候会把所有监听的进程都唤醒,而最终只有一个进程能处理事件成功,其他的进程在处理该事件失败后重新休眠或其他。这样的现象带来最主要的问题是造成性能浪费。 打个比方,比如说fork4个进程,这4个进...原创 2019-12-13 21:59:35 · 425 阅读 · 0 评论