06 2018 档案

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