![](https://img-blog.csdnimg.cn/195347d7a55f484c9251f07279b83189.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Libuv
文章平均质量分 61
该栏主要是展示博主日常关于Libuv框架的所学知识以及见解,仅供参考。
ufgnix0802
这个作者很懒,什么都没留下…
展开
-
C++外部执行类的私有函数
C++语法规定类外是不能访问类内部的私有函数的,那么当我们封装一个类的时候是用于给其他人使用的,那么务必会有类的接口要清爽干净的需求,也就是内部使用的函数也不能为一个共有函数,而是必须为一个私有函数。这样当其他人在使用的时候,看到我们类的共有接口便是其都可使用的接口。以下IdleTest类中的Update为一个私有方法,我们需要将这个函数赋予一个void*类型的指针,即函数指针转换为void*指针。下面使用一个Libuv中的测试单例(该单例不是标准单例格式,仅供演示)进行演示...原创 2022-11-27 20:37:52 · 627 阅读 · 0 评论 -
Libuv 句柄优雅关闭
当服务端与客户端处于连接状态时,如果客户端应用进程突然关闭,我们可以直接使用Libuv中的uv_close暴力断开两端的连接...原创 2022-11-26 22:20:15 · 816 阅读 · 0 评论 -
封装Libuv定时器 - Timer
Libuv底层定时器采用小顶堆结构管理,即最快超时的定时器句柄会放在最上面。原创 2022-11-21 21:20:38 · 334 阅读 · 0 评论 -
封装Libuv文件系统 - fileOperation
对Libuv的文件系统进行封装,主要针对异步接口封装。Libuv底层异步文件接口采用线程池进行实现。封装两大功能,一是读操作,传入自定义Buffer,获取文件中的所有数据。二是写操作,异步写入。原创 2022-11-21 21:17:33 · 232 阅读 · 0 评论 -
Libuv源码解析 - async
Libuv源码解析async模块。原创 2022-11-20 21:57:40 · 344 阅读 · 0 评论 -
Libuv源码解析 - uv_run
Libuv uv_run模块源码解析,包括uv_run之下的所有子模块源码解析。原创 2022-11-20 21:52:43 · 794 阅读 · 0 评论 -
Libuv源码解析 - 主要数据结构
libuv主要数据结构源码解析。原创 2022-11-20 21:50:37 · 362 阅读 · 0 评论 -
Libuv实现帧率控制
服务端帧率控制,保证在一段固定的时间内执行完所有事情(包括网络I/O等),如果有空余时间,那么我们Sleep等待一段时间。如果超时我们需要追帧处理。原创 2022-11-18 21:41:22 · 361 阅读 · 0 评论 -
Libuv源码解析 - uv_loop整个初始化模块
Libuv源码解析 - uv_loop整个初始化模块。原创 2022-11-10 21:53:24 · 749 阅读 · 0 评论 -
部署断点调试下进入Libuv源码的环境
博主使用过三种方式引入Libuv源码环境,接下来对三种方式进行详细说明。注意,以下方式默认都在项目内已经引入Libuv Lib静态链接库。原创 2022-11-10 21:52:06 · 517 阅读 · 0 评论 -
Libuv 源码解析 - QUEUE(双向循环队列)
Libuv中的高效双向循环队列结构是使用C语言构建,且所有方法均使用宏定义实现。Libuv中该结构使用指针数组构建而成,其中指针数组中只包含两个元素,类型均为void*类型,分别表示next、prev指针。我们联想双链表这类结构,不是应该还包含一个value类型吗?Libuv中QUEUE结构直接使用指针偏移来指向value。每一个节点尾部是一个QUEUE类型,通过向上偏移sizeof(节点类型) - sizeof(QUEUE)大小个字节来获得value。原创 2022-11-06 21:18:11 · 436 阅读 · 0 评论 -
无法解析的外部符号xxx 该符号在函数xxx中被引用
在一个解决方案已经有多个项目的情况下创建一个项目(比如开源项目,我们在此基础上建立我们自己的工程),我们把lib静态链接库以及库目录都按照一定的要求进行处理,但是却出现一些。后来实在是没有办法,所有主动的查找外部符号对应的头文件,通过头文件找到其相应的lib库,主动使用。这个问题博主查找BUG时间过久,顾在此记录。实际上我们只需定义我们自己的外部依赖项时,一开始我按照文章开头博客所说查找问题,但是并不能解决上述BUG(将缺失的lib库引入。原创 2022-11-02 21:35:32 · 2034 阅读 · 0 评论 -
Libuv 各个回调(异步)事件的调用时机
下面有一个应用场景,与uv_close的调用时机有关,服务端有一个心跳检测机制,判断连接上来每个会话(Session)是否具有活性。其中,ClientHeartCheck是一个定时器事件,定时时间为3000。原创 2022-10-31 21:01:10 · 749 阅读 · 0 评论 -
游戏服务端帧率控制(使用libuv中uv_now进行说明)
对于一个客户端请求来说,同一个请求每次都会执行比如事件1、事件2、事件3。但是事件1、事件2、事件3每次执行所消耗的时间是跟CPU有关的,并不能保证每次执行所消耗的时间都是一样的,比如事件1第一次执行耗时3ms,但是第二次执行耗时是4ms。而我们游戏中,人机是具备实时性的,如果服务端帧率随CPU的改变而改变,会导致玩家的游戏体验受到影响。原创 2022-09-07 22:08:35 · 878 阅读 · 0 评论 -
Libuv Timer定时器
在定时器启动后一段特定的时间后,定时器会调用回调函数。Libuv的定时器还可以设定为按照时间间隔定时启动,而不仅仅是启动一次。简单地使用一个定时器,超过时间timeout作为参数初始化定时器(意味第一次启动之后多久响应回调事件),还有一个可选参数repeat。定时器可以在任意时刻被终止。上述操作会启动一个循环定时器(repeating timer),它会调用uv_timer_start后,5秒(timeout)启动回调函数,然后每2秒(repeat)循环启动回调函数。来终止一个定时器。原创 2022-09-06 21:11:35 · 1748 阅读 · 0 评论 -
Libuv库 - 设计概述(中文版)
libuv是一个跨平台的支持库,原先只是为Node.js而编写。它是围绕事件驱动的异步I/O模型而设计的。 该库提供的不仅仅是在不同I/O轮询机制上的简单抽象,而且”handles“和”stream“的出现为sockets和其它实体提供了一个更加高级的抽象。还有跨平台的I/O文件和线程功能等更多的功能。 以下是一张图表,说明了构成libuv的不同部分以及它们与相应子系统的关系: 从左往右分为两部分,一部分是与NetWork I/O相关的请求,而另外一部分则是由FIle I/O、DNS Ops以及U原创 2022-07-02 21:58:27 · 1014 阅读 · 0 评论 -
Libuv库概述及libevent、libev、libuv对比(转载)
node.js最初发起于2009年,是一个可以让JavaScript代码脱离浏览器的执行环境,Libuv使用的是Google的V8执行引擎和Mac Lehmann的Libev。Node.js将事件驱动的I/O模型与该模型的编程语言(JavaScript)融合在一起,随着node.js的日益流行,node.js的开发者们也意识到应该让Node.js在Windows平台下也能工作,但是Libev只能在Unix环境下运行,Windows平台上与kqueue(FreeBSD)或者(e)poll(Linux)等内转载 2022-06-28 22:14:15 · 795 阅读 · 0 评论 -
Libuv框架echo-server.c源码详解(TCP部分)
客户端使用sokit工具进行演示。 运行Libuv框架的echo-server.c文件,效果如下:main.c(关于Libuv环境搭建也可参考文章开头的链接)原创 2022-06-27 22:20:55 · 797 阅读 · 0 评论 -
Libuv的安装及运行使用
由于此次演示运行平台为Windows平台,即需要CMake编译为visual studio项目进行编译运行。 下载后Libuv框架的目录结构如下: 紧接着,使用CMake生成visual studio项目。(打开CMake)如下: 以下信息默认安装即可。 以下内容无需取消勾选,在BUILD_TESTING和LIBUV_BUILD_TESTS中有最基础的模块,可供学习(即如果已经熟练掌握Libuv框架,可以取消BUILD_TESTING和LIBUV_BUILD_TESTS的勾选)。最后再次点击C原创 2022-06-23 22:07:19 · 2233 阅读 · 0 评论