采用Reactor模型。I/O 多路复用监听事件,收到事件后,根据事件类型分配(Dispatch)给某个进程 / 线程。
将代码改成I/O多路复用时出现了一个bug Bad file descriptor 这里是向已关闭的文件描述符写东西。 出问题的地方是 // 登录客户端的登录报文。 if (ClientLogin(TcpServer) == false) ChldEXIT(0); // 出了ClientLogin这个函数后,TcpServer失效。 // 接收文件…
两个程序,一个是崩溃后再运行、一个是杀死超时程序。 调度进程 先让1号进程接管,然后由这个被1号进程接管的进程来负责fork子进程,并等待子进程退出。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h&…
容灾 进程只能被9杀死,杀死后马上重启 聊天 注册+聊天 上线接收离线的消息 上传下载文件 上传文件 下载文件 将本地的两个mp4传到云端后,一个保留视频、一个保留音频、并剪切指定的时间范围、后自动传到本地 video1是《愚人的国度》、video2是《再见杰克》,保留video1的视频和video2的音频,并将视频剪切1~60秒的内容 根据ffp…
这个就是之前写的极简小咖秀 给上下文oFmtCtx创建两路流,视频流和音频流。剪切时先将帧跳转到起始点,再将两个流的时间戳更改。 #include <stdio.h> #include <stdlib.h> #include <libavutil/log.h> #include <libavutil/tim…
包括基本通信方式、如何解决粘包分包、如何传文件、如何记录批量传输的文件、如何批量传文件、如何应对服务端断连。 1、tcp基本通信方式 服务端:创建socket、bind、listen、accept、recv、send 客户端:创建socket、 connect、send、recv send如果发送缓冲区已满,会阻塞 recv接收缓冲区中没有数据可用…
有两个类,MySQL 和 ConnectionPool。MySQL负责封装mysql提供的接口,ConnectionPool负责管理连接。 1、两个类 MySQL类如下,这个还好,就是对原api的封装: // 数据库操作类 class MySQL { public: //初始化数据库连接 MySQL(); //释放数据库连接资源 ~MySQL();…
进程与线程 进程:拥有PCB,有独立地址空间。最小的分配资源单位,多个线程共享进程的资源。 线程:拥有PCB,没有独立地址空间。轻量级的进程,本质是进程。是CPU最小的执行和调度单位。 线程的优缺点 可以在一个进程内实现并发。 开销少,创建线程比创建进程要快。 数据通信、数据共享方便,同时也增加了开发的难度。 线程的创建和终止 线程创建、等待线程退…
CentOS7安装MySQL + 创建表 本地版的MySQL用着用着就挂了,在星佬的帮助下整了个docker版的数据库。 直接把他的笔记贴到文章的最后面吧。 实话实说,有点折腾 先按照这个pdf把本地版的MySQL装好 然后能在命令行启动mysql了 centos yum安装mysql出现Public key for mysql-community…
粘包/分包 发送得太快后会出现粘包。 为什么粘包?TCP是面向字节流的协议,UDP是面向报文的协议。 数据流会把小的报文粘在一起,也会把大的报文拆分。 这里采用自定义消息结构解决的粘包分包。在内容前面加上长度。 写函数 bool TcpWrite(const int sockfd,const char *buffer,const int ibufl…