
开源项目
文章平均质量分 69
靓仔且落泪
这个作者很懒,什么都没留下…
展开
-
TCP聊天室:一个acceptor线程,多个工作线程
一.简介该聊天室相对于之前的聊天室进行了相应的升级:之前的聊天室进程中只有一个线程,因此该聊天室程序对于监听描述符上的连接请求以及多个聊天室成员的连接描述符上的读写操作只能完成一个;该聊天室进程中采取了多线程模式,类似于线程池的思想,一个聊天室进程中可以并发的利用主线程处理监听描述符上的连接请求,同时对于每一个聊天室成员的连接描述符分配一个工作线程,完成与该聊天室成员的读写操作.具体的思想是(创建多个线程,每个线程运行一个独立的...原创 2022-04-19 12:05:52 · 2546 阅读 · 2 评论 -
TCP聊天室
一.服务器代码#include "hv/hloop.h"#include "hv/hsocket.h"#include "hv/hbase.h"#include "list.h"struct chatroom_s { hloop_t* loop;//事件循环结构体指针 hio_t* listenio;//监听io结构体 int roomid;//房间号 struct list_head conns;//链表存储房间中的连接};struct chatroom_s chatroom;原创 2022-04-07 15:43:48 · 434 阅读 · 0 评论 -
libhv学习路线 之 HTTP服务器
HTTP服务器的内部实现原理主要用到了进程和线程的概念,利用多个进程或者线程同时监听 监听socket上的连接事件.一 HTTP服务的建立 1. HTTP服务器的建立首先需要建立HTTP所需要的HTTP服务(HttpService变量),该变量中主要存储了各种客户端发来的get,post等请求的响应内容(以GET方法为例),建立方法如下所示:HttpService router;router.GET("/ping", [](HttpRequest* req, HttpRespon...原创 2022-03-27 09:45:38 · 3860 阅读 · 0 评论 -
libhv学习路线 之 TCP客户端
TCP客户端的代码实现由于基本思路和服务器差不多,所以我就不进行代码讲解了,只是展示以下我的具体实现过程:A.调用hloop_new()函数建立事件脚本;hloop_t *loop = hloop_new(0);B.调用hloop_create_tcp_client()函数与服务器建立连接,并且返回连接socket,在连接socket对应上的I/O事件上创建connect事件,绑定on_connect()用户回调函数;hio_t *conn...原创 2022-03-21 23:03:50 · 1088 阅读 · 0 评论 -
libhv学习路线 之 TCP服务器
对于libhv TCP端的服务器实现,基本上也已经被libhv封装完成了,所以我们只需要研究以下libhv内部是如何实现TCP连接建立,以及收发数据的.一 基于libhv的TCP服务器内部实现原理 A..我们需要建立一个事件回环loop变量,具体代码如下所示:hloop_t* loop = hloop_new(0); B.调用hloop_create_tcp_server()函数建立TCP连接,具体代码如下所示,IP地址设置的是0.0.0.0的主...原创 2022-03-21 17:41:17 · 6093 阅读 · 2 评论 -
libhv学习路线 之 I/O复用
目录一 I/O事件的创建二 I/O事件的执行三 I/O事件执行顺序以epoll为例,libhv在LINUX操作系统使用的是基于epoll的I/O复用.对于高性能服务器中,I/O复用事件的出现使得服务器能够同时监听多个端口,同时处理多个TCP,UDP请求;客户端也可以同时处理多个用户输入和网络连接,甚至可以处理非阻塞connect()(如果第一次调用非阻塞connect连接没有立即建立返回,则调用select()监听socket上面的写事件,如果存在写事件...原创 2022-03-21 14:40:46 · 3383 阅读 · 0 评论 -
libhv学习路线 之 定时器
定时器事件,顾名思义就是定时事件到了,于是开始执行的事件.一 定时器事件的创建原创 2022-03-20 23:09:12 · 1371 阅读 · 0 评论 -
libhv学习路线 之 list.h
在libhiv库函数中,有一个双向链表的实现,这个双向链表不同于我们一般认知的双向链表,它是没有数据的,只有前趋后继指针,具体代码如下所示(函数位置在base文件夹下面的list.h头文件中):struct list_head { struct list_head *next, *prev;};#define list_node list_head从以上我们可以看出,每一个list_node节点只有指向之前list_node节点和之后list_node节点...原创 2022-03-20 11:25:30 · 447 阅读 · 0 评论 -
libhv学习路线 之 idle事件
目录一 idle事件的创建:二 idle事件的处理三.idle事件的销毁四.idle事件执行顺序libhv提供的事件除了支持定时器事件和I/O事件之外,还额外提供了idle事件.初看idle事件,根据字面意思:"空闲的"可得,这个事件指的是当libhv事件回环中没有其他事件(定时器或者I/O事件)可以执行时才会去执行的事件.一 idle事件的创建: hidle_add函数的用途是:1.在堆区创建一个idle类型的节点(赋予事件类...原创 2022-03-20 16:32:23 · 641 阅读 · 0 评论