ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于Libuv_Server_Client笔记

2021-03-30 20:00:31  阅读:473  来源: 互联网

标签:连接 uv Libuv Client Server libuv loop 客户端


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有