06 2018 档案
摘要:1. Location 的整理 在将配置解析完后,所有的 location 此时都以 tree 的形式组织起来,具体可参考 "Nginx之 Location 的生成" 。 此时需要对所有 server 下的 location 进行整理(如把同类型的 location 放置在一起以便于查找等)。 1.
阅读全文
摘要:1. Location 的生成 location 的生成大致有三种: 由 location 指令直接生成 命令 location:仅用于 server 内部跳转,如 rewrite 就是命名 location,命令 location 不能包含在其他 location 里。 未命名 location:
阅读全文
摘要:1. HTTP 过滤模块 ngx_http_not_modified_module 仅对 HTTP 头部做处理。在返回 200 成功时,根据请求中 If Modified Since 或者 If Unmodified Since 头部取得浏览器缓存文件的时间,再分析返回用户文件的最后修改时间,以此决
阅读全文
摘要:1. 常用数据结构 1.1 ngx_str_t 1.2 ngx_list_t 1.3 ngx_table_elt_t 1.4 ngx_buf_t 1.5 在向用户发送 HTTP 包体时,就要传入 ngx_chain_t 链表对象,注意,如果这是最后一个 ngx_chain_t,则必须将 next 设
阅读全文
摘要:注:当前分析基于 "Nginx之搭建反向代理实现tomcat分布式集群" 的配置。 1. 用到的指令 下面介绍在上面的配置中用到的指令。 upstream 指令 该指令用于设置一组可以在 proxy_pass 和 fastcgi_pass 指令中使用的代理服务器,默认的负载均衡方式为轮询。示例如下:
阅读全文
摘要:参考博文: "Nginx反向代理实现Tomcat分布式集群" 1. jdk 安装 jdk 下载网址: "http://www.oracle.com/technetwork/java/javase/downloads/jdk8 downloads 2133151.html" 执行如下: 这样就安装好了
阅读全文
摘要:1. 通用配置项 :Nginx 安装的根路径,所有其他的路径都要依赖于该选项。 :指定 Nginx 二进制文件的路径。如果没有指定,那么这个路径会依赖于 prefix 选项。 :如果在命令行没有指定配置文件,那么将会通过这里指定路径,Nginx 将会去那里查找它的配置文件。 :指定错误文件的路径,N
阅读全文
摘要:1. ngx_http_top_body_filter 该链表用于构造响应消息的响应正文. 大致有以下模块在该链表中插入了自己的函数: 1. ngx_http_range_filter_module: ngx_http_range_body_filter 2. ngx_http_copy_filte
阅读全文
摘要:1. ngx_http_top_header_filter 该链表主要是用于构造响应消息的消息报头。 ngx_http_top_header_filter 单链表有如下模块插入了操作: 1. ngx_http_not_modified_filter_module: ngx_http_not_modi
阅读全文
摘要:11. HTTP 阶段执行 下面会依次执行以下阶段: 1. NGX_HTTP_SERVER_REWRITE_PHASE: 在将请求的 URI 与 location 表达式匹配前,修改请求的 URI (所谓重定向)是一个独立的 HTTP 阶段。 2. NGX_HTTP_FIND_CONFIG_PHAS
阅读全文
摘要:假设访问静态网页的配置如下: 假设在浏览器输入如下指令: ,Nginx 服务器即会返回所请求的页面。大致流程如下。 1. ngx_connection_t 2. ngx_http_init_connection 3. ngx_add_timer 添加一个定时器事件,超时时间为 timer 毫秒. 4
阅读全文
摘要:http 框架的初始化与 nginx rtmp 框架的初始化类似: "Nginx rtmp之配置项的管理" 1. ngx_http_module_t ngx_http_module 核心模块定义了新的模块类型 NGX_HTTP_MODULE。这样的 HTTP 模块对于 ctx 上下文使用了不同于核心
阅读全文
摘要:1. ngx_http_core_listen 2.1 ngx_parse_inet_url 3. ngx_http_add_listen 对ngx_http_conf_port_t的addrs动态数组的理解: 在nginx.conf配置文件中,对于同一个端口8000,我们可以同时监听127.0.0
阅读全文
摘要:1. ngx_listening_t 结构体 ngx_cycle_t 对象中有一个动态数组成员叫做 listening,它的每个数组元素都是 ngx_listening_t 结构体,而每个 ngx_listening_t 结构体又代表着 Nginx 服务器监听的一个端口。 2. ngx_cycle_
阅读全文
摘要:1. ngx_command_t 为了统一配置项目的解析,Nginx 定义了如下数据类型对所有的 Nginx 配置项进行了统一的描述。 2. ngx_conf_t ngx_open_file_s ngx_conf_file_t ngx_conf_dump_t 3. ngx_conf_parse 该函
阅读全文
摘要:1. 共享内存 在 Nginx 里,一块完整的共享内存以结构体 ngx_shm_zone_t 来封装,如下: tag 与 shm.name:name 字段主要用作共享内存的唯一标识,它能让 Nginx 知道调用者想使用哪个共享内存,但它没法让 Nginx 区分user到底想创建一个共享内存,还是使用
阅读全文
摘要:1. 信号 Nginx 在管理 master 进程和 worker 进程时大量使用了信号。Linux 定义的前 31 个信号是最常用的,Nginx 则通过重定义其中一些信号的处理方法来使用吸纳后,如接收到 SIGUSR1 信号就意味着需要重新打开文件。 使用信号时 Nginx 定义了一个 ngx_s
阅读全文
摘要:1. 使用 fcntl() 给记录加锁 使用 fcntl() 能够在一个文件的任意部分上放置一把锁,这个文件部分既可以是一个字节,也可以是整个文件。这种形式的文件加锁通常被称为记录加锁,但这种称谓是不恰当的,因为 UNIX 系统上的文件是一个字节序列,并不存在记录边界的概念,文件记录概念只存在于应用
阅读全文
摘要:信号量分 System V 信号量和 POSIX 信号量,这里仅介绍 POSIX 信号量。 1. 概述 2. 命令信号量 3. 信号量操作 3.1 等待一个信号量 sem_wait() 函数会递减(减小 1)sem 引用的信号量的值。 如果信号量的当前值大于 0,那么 sem_wait() 会立即返
阅读全文
摘要:1. Nginx 频道 ngx_channel_t 频道是 Nginx master 进程与 worker 进程之间通信的常用工具,它是使用本机套接字实现的,即 socketpair 方法,它用于创建父子进程间使用的套接字。 这个方法可以创建一对关联的套接字 sv[2]。 domain:表示域,在
阅读全文
摘要:recvmsg 和 sendmsg 函数 这两个函数把大部分参数封装到一个 msghdr 结构体中: msg_name 和 msg_namelen 这两个成员用于套接字未连接的场合(如未连接 UDP 套接字)。它们类似 recvfrom 和 sendto 的第五个和第六个参数: msg_name 指
阅读全文
摘要:1. 概述 Linux 提供了多种进程间传递消息的方式,如共享内存、套接字、管道、消息队列、信号等,而 Nginx 框架使用了 3 种传递消息的传递方式:共享内存、套接字、信号。 在进程间访问共享资源时,还需要提供一种机制使各个进程有序、安全地访问资源,避免并发访问带来的未知结果。Nginx 主要使
阅读全文
摘要:Linux 支持两种方式的共享内存:System V 和 POSIX 共享内存。 1. POSIX 共享内存 1.1 POSIX 共享内存的由来 System V 共享内存和共享文件映射的不足: System V 共享内存模型使用的是键和标识符,这与标准的 UNIX I/O 模型使用文件名和描述符的
阅读全文
摘要:1. dl debug.c:74: No such file or directory. 如上图,当使用 gdb 调试执行 r 时,会出现如上打印。 解决方法如下: 1. : 获取源文件,此时,该 "glibc source" 还不是一个有效的包. 2. 在 /usr/src 或 /usr/src/
阅读全文
摘要:来自: "GOPATH与工作空间" GOPOATH 设置 go 命令依赖一个重要的环境变量:$GOPATH 在类 Unix 环境下大概这样设置: 为了方便,应该新建一个文件夹,并且上一行加入到 或者 或者自己的 sh 的配置文件中。 GOPATH 允许有多个目录,当有多个目录时,请注意分隔符,多个目
阅读全文
摘要:来自: "profile、bash_profile、bashrc文件的作用与区别" 1. profile 文件 1.1 profile 文件的作用 ,用于设置系统级的环境变量和启动程序,在这个文件下配置会对所有用户生效。当用户登录(login)时,文件会被执行,并从 目录的配置文件中查找 shell
阅读全文
摘要:1. avformat_alloc_context 首先为 AVFormatContext 结构体分配动态内存,然后调用 avformat_get_context_defaults 函数获取该 AVFormatContext 的默认值。 2. avformat_get_context_default
阅读全文
摘要:GDB 完成的作用: 1. 启动程序,可以按照工程师自定义的要求随心所欲的运行程序 2. 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式 3. 当程序被停住时,可以检查此时程序中所发生的事,并追索上文 4. 动态改变程序的运行环境 常见问题: 1. 如何打印变量的值?(print va
阅读全文
摘要:1. av_register_all() 该函数位于 libavformat/allformats.c 中。 该函数主要是注册所有的编解码器、复用/解复用组件等。 这里的 AVOnce 和 AV_ONCE_INIT 以及 ff_thread_once 为: 在多线程程序中,不管创建了多少个线程,有些
阅读全文
摘要:注:下面的一切都是在 root 模式下进行的,可以不再 root 模式下进行 1. 安装linux的基础环境 基础环境就是编译代码的基础库,Ubuntu联网安装软件很简单,一个语句即可搞定,这里列出语句如下: 2. 安装依赖库 依赖库分两方面,参考以下网站列出的依赖库信息,本文选择的版本均参考于此网
阅读全文
摘要:1. Cache 的工作方式 Web Cache 作为一种网页缓存技术,可以在用户访问网站服务器的任何一个中间网元上实现。根据 HTTP 协议的定义,在一次网页访问中,用户从客户端发出请求到网站服务器响应请求内容的交互过程中,通常会涉及 4 个关键的网元:用户、代理、网关和 Web 服务器。当 We
阅读全文
摘要:1. 缓存简介 缓存是位于服务器和客户端的中间单元,主要根据用户代理发送过来的请求,向服务器请求相关内容后提供给用户,并保存内容副本,例如 HTML 页面、图片、文本文件或者流媒体文件。然后,当下一个针对相同 URL 的请求到来时,缓存直接使用副本来响应 HTTP 请求,而不需要向源服务器再次发送请
阅读全文
摘要:1. 简介 HTTP 协议是 Hyper Text Transfer Protocol(超文本传传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。HTTP 通常架构在 TCP 传输协议之上,如下图所示。有时出于安全的考虑,HTTP 还需要经过 TLS 或 SSL 层的封装,架构
阅读全文
摘要:1. Cookie 1.1 为什么需要 Cookie? HTTP 协议是一种无状态的协议,也就是说,当前的 HTTP 请求与以前的 HTTP 请求没有任何联系。显然,这种无状态的情形在某些时候将让用户觉得非常麻烦,比如在网上商城购物时,每购买一个商品都要重新输入一次用户名和密码,用户很快就会失去耐心
阅读全文
摘要:1. 什么是 CDN? 来自 "《什么是 CDN?》" CDN(内容交付网络)是一种高度分布式服务器平台,为交付 Web 应用程序、流媒体等内容专门优化。服务器网络分布于众多物理和网络位置,对最终用户的 Web 内容请求和快速安全媒体交付做出快速响应。网络在内容服务器(源站)和最终用户(客户端)间起
阅读全文
摘要:1. 是否可切片的检测 首先在调用 SrsHlsCache::reap_segment 函数进行切片时,针对音频或视频,都会有一个函数来进行检测当前片的时长是否符合所要求的时长。 对于音频,会调用 SrsHlsMuxer::is_segment_absolutely_overflow 函数进行检测,
阅读全文
摘要:1. SrsHls::on_audio 将音频数据封装到 ts 文件中。 1.1 SrsAvcAacCodec::audio_aac_demux 1.1.1 SrsAvcAacCodec::audio_aac_sequence_header_demux 1.1.2 SrsCodecSample::a
阅读全文
摘要:1. SrsHls::on_video 2. SrsAvcAacCodec::video_avc_demux 接收到一个视频消息,首先调用该函数解析该视频数据。 接下来,若检测接收到的 video packet type 为 1,即为 NAL 单元,则调用 video_nalu_demux 进行解封
阅读全文
摘要:1. SrsTsContext::encode_pes 该函数位于 srs_kernel_ts.cpp 中。下面的分析基于假设当前要封装的消息是视频。 该函数首先调用 编码第一个 PES 包(PES 包就是在音视频帧上加入了时间戳等信息). 2. SrsTsPacket::create_pes_fi
阅读全文
摘要:1. SrsTsContext::encode_pat_pmt 在该函数中,将 PAT 和 PMT 封装到 TS Packet 中,并将这两个 TS packet 写入到 ts 文件中。 该函数中,首先调用 SrsTsPacket::create_pat 函数生成一个 pmt 包。 1.1 SrsT
阅读全文
摘要:1. 综述 TS:全称为 MPEG2 TS。TS 即 "Transport Stream" 的缩写。它是分包发送的,每一个包长为 188 字节(或 204 个字节的包,在 188 个字节后加上 16 字节的 CRC 校验数据)。包的结构为,包头为 4 个字节,负载为 184 个字节。在 TS 流里可
阅读全文
摘要:1. 综述 HLS(HTTP Live Streaming) 把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。HLS 协议由三部分组成:HTTP、M3U8、TS。这三部分中,HTTP 是传输协议,M3U8 是索引文件,TS 是音视频的媒体信息。 关于 HLS 的详细介绍可参考:
阅读全文
摘要:来自: "Delivery HLS" 1. 综述 SRS支持HLS/RTMP两种成熟而且广泛应用的流媒体分发方式。 RTMP指Adobe的RTMP(Realtime Message Protocol),广泛应用于低延时直播,也是编码器和服务器对接的实际标准协议,在PC(Flash)上有最佳观看体验和
阅读全文
摘要:1. 综述 SRS 关于 HLS 的具体配置可见: "HLS部署实例" SRS 关于 hls 的配置文件内容如下: SRS 端具体流程分析如下: 1. SRS 建立对 1935 端口的监听: "SRS之监听端口的管理:RTMP" 2. 在建立对 1935 端口监听的过程中创建了针对该端口的 tcp
阅读全文

浙公网安备 33010602011771号