其他分享
首页 > 其他分享> > 关于Libuv_Server_Client笔记

关于Libuv_Server_Client笔记

作者:互联网

Server

log4x.h log4x.c

​ 初始化log系统:记录日志日期、时间、文件名和行号、log记录的最低级别、屏幕显示日志内容

​ 关闭log系统

​ 记录日志

?stb_sprintf.h

​ 进制转换、符号判断、输出字符转换后的结果

md5.h md5.c

​ MD5算法:

​ 产生出一个128位元(16位元组)的散列值,用于确保信息传输完整一致

​ 输入任意长度的信息,经过处理,输出为128位的信息;

​ 不同的输入得到的不同的结果;

Eg.发送一个电子文档,发送前,我先得到MD5的输出结果a。在对方收到电子文档后,对方也得到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改。

uv.h

libuv中文API手册 http://luohaha.github.io/Chinese-uvbook/

libuv强制使用异步,事件驱动的编程风格。核心工作是提供一个event-loop,还有基于I/O和其它事件通知的回调函数。libuv还提供了一些核心工具,例如定时器,非阻塞的网络支持,异步文件系统访问,子进程等。

1、libuv会负责将来自操作系统的事件收集起来,或者监视其他来源的事件。用户就可以注册回调函数,回调函数会在事件发生的时候被调用。event-loop会一直保持运行状态。

2、event-loop会被uv_run()启动

3、uv_loop_init 初始化loop之前,给其分配相应的内存

uv_loop_close(uv_loop_t *) 关闭loop,回收内存空间

4、uv_default_loop 获取libuv提供的默认loop

5、uv_strerror(int)和uv_err_name(int)分别获取const char *格式的错误信息和错误名字

回调函数:libuv所关注的事件发生后,所调用的函数。应用程序的特定逻辑会在回调函数中实现

6、uv_fs_open()、uv_fs_close()…支持reading/writing file

7、最基础的I/O操作是流stream(uv_stream_t)

TCP:面向连接的,字节流协议,基于libuv的stream实现

server

1.uv_tcp_init 建立tcp句柄
2.uv_tcp_bind 绑定
3.uv_listen 建立监听,当有新的连接到来时,激活调用回调函数
4.uv_accept 接收链接
5.使用stream处理来和客户端通信

client

当你在服务器端完成绑定/监听/接收的操作后,在客户端只要简单地调用uv_tcp_connect

uv_stop() 用来终止event loop

uv_timer_start:定时器启动后的特定时间后,定时器会调用回调函数

uv_timer_set_repeat(uv_timer_t *timer, int64_t repeat);

超时时间timeout作为参数初始化一个定时器,可选参数repeat,定时器能在任何时间被终止

thread_uv.h

对libuv下的线程与锁进行封装;获取libuv错误码对应的错误信息

dumpfile.h

​ 生成程序崩溃时的dump文件(创建文件、生成信息、写入内容)

​ 主程序初始化时加入 DeclareDumpFile()

net_base.h

网络库基本功能函数:

​ 大小端判断
​ 32&64位系统判断
​ ntohll与htonl的实现
​ int32与int64序列/反序列化为char[4],char[8]
​ 数据包头结构定义

packet_sync.h

TCP 数据包封装,依赖libuv、openssl功能:接收数据,解析得到一帧后回调给用户;同步处理,接收到马上解析

​ 根据net_base.h中NetPacket的定义,对数据包进行封装。
​ md5校验码使用openssl函数
​ 同一线程中实时解码

circulebuffer读取packet中data部分;接收到数据,把数据保存在circulebuffer

把数据组合成NetPacket格式的二进制流,可直接发送。

pod_circularbuffer.h

环形缓冲区:支持存储pod数据类型,直接用memcpy连续复制多个数据

​ 获取缓冲区有效数据长度

​ 向缓冲区写入数据,返回实际写入对象

​ 从缓冲区读取数据,返回实际读取的字节数

tcpserver.h tcpserver.cpp

基于libuv封装的tcp服务器,使用log4x作日志工具:包括uv.h的头文件

​ 初始化Server、建立客户端连接、设置响应、设置生存时间、关闭连接、设置端口号、绑定IPv4/IPv6地址

​ 监听端口、删除回收TCP_Handle、获取Client的ID、记录关闭日志信息、设置端口号、接受Client的信息

每次检测GetUVError

server_main.cpp

接受Client发来的数据(是否成功接受)、设置端口号、设置生存时间60s、关闭Client连接

Client

tcpclient.h tcpclient.cpp

基于libuv封装的tcp服务器,使用log4x作日志工具:包括uv.h的头文件

​ 分配客户端发送数据的空间、初始化Client、启动连接、关闭连接、设置生存时间、 建立IPV4/IPV6连接(IP地址,端口号)、是否需要重连Client、记录关闭日志信息、重连计时器、创建线程连接(是否超时)

main.cpp

关闭客户端连接、设置Sever的IP地址、客户端发送数据是否成功、关闭客户端连接

标签:连接,uv,Libuv,Client,Server,libuv,loop,客户端
来源: https://blog.csdn.net/weixin_44725321/article/details/115333952