IPV4流媒体网络多播-前置知识
IPV4流媒体项目(网络多播)-前置知识
仓库链接:https://github.com/maxswordsman/IPV4_StreamingMedia
一、相关概念1.流媒体流媒体(Streaming Media)是一种通过网络传输的媒体形式,它允许用户在数据传输过程中即时播放音频、视频或其他媒体内容。这种技术让用户无需下载整个文件就能观看视频或听音乐
2.流量控制流量控制是一种网络技术,用于管理和控制网络中数据的传输,以确保数据传输的稳定性和效率。流量控制主要目的是防止网络过载,优化或保证系统的性能和可靠性。这通常通过以下几种方式实现:
速率控制:限制数据传输的速度,使其保持在网络能够处理的范围内。这有助于避免数据丢失和网络拥堵
拥塞控制:在网络拥塞时,调整数据发送的速率,减少数据包的丢失和重新传输。TCP协议中的拥塞控制机制是一个典型例子
优先级控制:根据数据包的重要性或优先级进行排序,优先传输更重要的数据。这常用于实时通信服务,如VoIP(语音通话)或在线游戏
流量整形(Traffic Shaping):调整数据传输的时间和速率,使流量更平滑地通过网络。
(1) ...
UNIX环境编程-进程通信-套接字编程(13)
进程通信-套接字编程(13)视频教程
IPC(Inter-Process Conmunication)进程间通信
一、管道管道必须凑齐读写双方才可以实现
管道可以看作为队列。先入先出,队首出,队尾入
在C语言中,使用管道(pipes)进行进程间通信是一种经典方法。管道主要用于进程间传递数据
管道由内核提供,单工,具有自同步机制
自同步机制:管道的自同步机制指的是管道在进程间通信时内置的同步特性,这些特性确保了数据的一致性和顺序性。管道通常是阻塞的,这意味着在特定情况下,读操作和写操作会被阻塞,直到某些条件得到满足。这种行为形成了管道的基本自同步特性。
管道分为:匿名管道与命名管道
1.匿名管道匿名管道是一种简单的进程间通信(IPC)机制,主要用于有父子关系的进程间的通信。在Unix和类Unix系统(如Linux)中,匿名管道非常常见。它们是单向的通信方式,通常用于一个进程向另一个进程(具有父子关系的进程)发送数据
基本特性
单向通信:数据只能在一个方向上流动,要么是从父进程到子进程,要么是从子进程到父进程。
临时通信通道:管道在使用完毕后会被销毁。
数据流:管道中的数 ...
UNIX环境编程-高级IO(12)
UNIX环境编程-高级IO(12)视频教程
代码链接
一、有限状态机1.概念有限状态机(Finite State Machine, FSM)是用于表示和控制执行序列的数学模型。它可以处于有限数量的状态之一,而且在任意时刻只能处于其中的一个状态。FSM的状态、状态转移和可能的输入动作都是预定义的。
FSM通常分为两类:
确定性有限自动机(DFA):对于任何给定的输入和当前状态,其转移是唯一确定的。
非确定性有限自动机(NFA):对于给定的输入和当前状态,可能有多个可能的下一个状态
有限状态机可以使用以下几个元素来描述:
状态 (States):FSM可以处于的所有可能情况。
初始状态 (Start State):FSM开始操作时的状态。
输入 (Inputs):可以影响状态转移的外部决策。
转移函数 (Transition Function):定义了基于当前状态和输入如何从一个状态转移到另一个状态。
结束状态 (End States or Accept States):在某些类型的FSM中定义了特定的结束或接受状态
2.实例(数据中继)(1)任务要求
(2)补充知识f ...
TinywebServer项目-章节整理(16)
TinywebServer项目– 章节整理(16)原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
一、线程同步机制包装类将线程互斥锁、条件变量、信号量通过类进行封装,保证线程同步
二、半同步半反应堆线程池基于模板类,为连接任务构建工作线程数量一定的线程池,主线程将任务插入线程池的请求队列中,工作线程阻塞至请求队列上,竞争任务,并执行
工作线程的run函数中,会根据服务器的事件处理模式,对任务进行处理:
Reactor模式下:
主线程仅负责套接字文件描述符的监听。线程池中的工作线程需要进行 IO 数据的读写,以及业务的逻辑处理
Proactor模式下:
使用同步 IO 模拟Proactor模式,主线程不仅需要负责套接字文件描述符的监听,而且需要负责 IO 数据的读写。线程池工作线程仅需要进行业务的逻辑处理
Reactor模式下:
若当前就绪事件为读事件,工作线程需要为连接任务,进行 IO 数据的读取,将客户端的请求报文,读取至缓冲区m_read_buf。并且进行业务的逻辑处理,对请求报文进行解析,并根据解析情况,生成响应报文至m_write_bu ...
TinywebServer代码详解-调试编译运行与压力测试(15)
TinywebServer代码详解– 调试编译运行与压力测试(15)原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
一、环境该项目,用到的额外的库,有JSONCPP用于对JSON数据进行解析以及MYSQL库用于连接数据库
1.JSON库使用命令安装
12$ sudo apt-get update$ sudo apt-get install libjsoncpp-dev
2.MYSQL安装以及简单的操作,可以进行跳转至链接:UBUNTU下安装MYSQL
二、调试与编译运行1.调试使用make命令,对每一个模块生成目标文件(.o文件),而不进行链接。这样做的优点:
快速编译:开发者可能只想快速编译一个文件来检查语法错误或其他问题(可以模块化对错误问题进行定位),而不进行完整的构建过程
部分更新:在大型项目中,如果只修改了一个文件,使用 make 可以仅重新编译该文件对应的对象文件,提高编译效率(后续可以通过命令将多个目标文件进行链接为一个可执行文件)
模块化测试:在某些情况下,开发者可能需要构建特定的对象文件以进行单元测试或模块测试
(1)CGImys ...