- 博客(16)
- 收藏
- 关注
原创 网络编程中选项
setsocketopt / getsocketopt函数函数原型:#include <sys/types.h>#include <sys/socket.h>int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);int setsockopt(int sock, int level, int optname, const void *optval, socklen_
2021-09-19 07:16:45 207
原创 sip知识
sip消息大体可以分为dialog和transaction两大类,在sip报文中可以根据报文的字段进行区分:会话(Session): 用于进行媒体流传送。当一方发出请求,而另外一方或多方接受请求并通过信令交互成功后才能建立会话。跟SDP内信息相关。在SDP中,多媒体会话指的是一组的媒体发送方和接收方及媒体流从发送方流向接受方。会话是由SDP里的user name, session id, network type, address type, 和源处地址元素来确定的。只有当媒体协商成功后,会话才能被建立
2021-08-19 15:49:49 349
原创 tcp状态机笔记
前段时间参加一个部门内部的一个关于socket通信的培训,回来之后,将学习到的只是做了一下记录,防止时间过长,淡化了记忆; 做过网络开发的同学知道使用netstat指令在线查看某一个端口的连接状态,或者使用wireshark打开网络上抓取的包,去分析当时的网络状态; 在使用netstat命令的时候,我们可以看到某一个监听端口当前接收的连接的状态,例如下图: 这个是使用netstat命令查看的linux机器上8080端口的状态的截图,该8080端口正好是我们的tcp监听的一个端口;从上面截图中
2021-08-19 14:53:55 249
原创 DTMF学习笔记
概念 DTMF是dual tone multi frequency的缩写,中文称之为“双音多频”,它是由高频群和低频群组合而成的;“多音双频”中规定,在按键面板中,横向和纵向各占有4个信号,横向的为高频信号,纵向的为低频信号,这样的话,在面板中组合起来,总共有16个频率信号;而按键的数字是由一个高频信号和一个低频信号组合而成;所以DTMF信号总共有16个,也就是说,总共有16个字符可以通过DTMF表现出来;IP网络中如何传输DTMF信号DTMF信号是支持在网络中传输的,目前广泛支持的传输方式有两
2021-05-14 10:00:35 1641
原创 RTT测算方式
1、利用tcp协议中的可选字段,选择timestamp字段,用于记录当前请求发送出去的时间,当收到接收方的ack报文的时候可以利用当前的时间和ack报文中的时间计算出RTTPS:1、在TCP报文中,timestamps不是必填字段,而是可选则断,如果需要依赖报文中的timestamps字段来进行RTT计算,则需要开启选填字段中的timestamp;2、ack中的timestamp字段和发送方报文中的timestamp字段的值是一致的,接收方在收到报文段之后,不会对timestamp字段进行修改,而是.
2021-05-14 09:55:02 3137
原创 c++多态
前几天和另一个同事聊天,正好聊到了c++编程语言的的三大特性:封装、继承和多态;当时同事随口提起多态的运行机制,由于之前对这方面没有完全理解,所以回来就做了一个实验,以加深对多态机制的印象,顺便记录下来,以便后面还可以review;多态的概念: 什么是多态? 官方解释为“在不同继承关系的类对象,去调同一函数,产生了不同的行为”; 我个人认为,“多态是在继承的基础上,父类和子类同时实现某个使用virtual修饰的方法,在程序运行时,通过动态解析父类指针指向的实际对象,来确定调用的具体实现.
2021-04-30 17:37:24 168 2
原创 google-perftools工具介绍
最近使用了一下google-tools工具集,该工具集可以使用来查找对应的程序的性能以及内存问题,对于工具集的介绍 ,大家可以百度查找,本篇主要还介绍该工具集的安装和使用; 首先我们上官网上下载gperftools-xxx.tar.gz源码包和libunwind-xxx.tar.gz源码包(gperftools是工具集,集成内存检测和性能检测工具,libunwind是堆栈采集的库,gperftools采用优化编译的情况下会依赖于它)。工具安装:编译安装libunwind a)解压该压缩包,执
2021-04-30 17:16:05 1251 1
原创 nginx-rtmp模块用户请求流程串联
前面的博文,我们已经介绍了rtmp请求的分发,接下来,我们将以用户连接请求为例,进行说明,看一下整个rtmp模块处理请求的流程;…
2021-03-21 16:33:54 293
原创 nginx rtmp模块握手过程
上一篇文章,我们分析了rtmp模块接受用户请求的流程,主要介绍了一个用户请求到达server端之后,nginx rtmp模块如何接收请求,并为用户创建session,以及session的初始化等一系列操作;本章,我们将分析rtmp模块中的握手流程。 根据rtmp协议的规定,rtmp存在三次握手的过程,简单的来说,就是客户端发送C0、C1请求,服务端收到之后,发送S0、S1给客户端,客户端在收到S1之后需要发送C2,服务端在收到C1之后需要发送S2;只有当客户端收到S2之后,并且服务端收到...
2021-03-19 23:37:59 302
原创 rtmp用户请求连接建立
上一节,我们介绍了rtmp模块的初始化;在上一节中,我们提到了,当有rtmp模块的请求到达时,nginx处理网络事件的event模块会回调rtmp模块的ngx_rtmp_init_connection接口,本节中,我们将分析一下RTMP模块是如何处理连接请求的。 我们首先看一下ngx_rtmp_init_connection该函数的函数体,在函数体部分有对关键部分的解释说明:voidngx_rtmp_init_connection(ngx_connection_t *c){ n.
2021-03-15 20:44:07 388
原创 nginx-rtmp模块初始化
nginx core模块加载其他模块的要求 了解过nginx源码的同学都知道,nginx是高度模块化的一个开源服务,nginx core模块提供了一个固定模式的接口,其他的模块只需要按照core模块提供的接口,做相应的实现,就能够被nginx core模块加载,也就能够成为nginx的一个工作的模块; nginx core提供的接口为ngx_command_s 结构体和ngx_module_s结构体,我们开发的其他模块,只要实现这两个接口提中的接口,就能够被nginx加载起来;接下来我们分别介绍一
2021-03-14 10:37:45 278 2
原创 nginx rtmp模块的介绍
nginx简单介绍 对于nginx服务,大家都知道,他是一个轻量级的高性能的http服务和方向代理服务,它也支持了pop3/IMAP等协议;最关键的是,它开放了相应的接口,支持其他第三方模块的接入;第三方模块只需要按照nginx开放的接口进行实现,就能够被nginx的core模块加载起来; 提到nginx的第三方模块的开发,顺带提一下nginx对模块的管理,nginx核心模块仅仅负责直接的子模块的和nginx全局状态的管理,对于子模块内部的数据或者模块,不做任何的管理;所以说nginx是一个高度结
2021-03-14 09:12:19 1070
原创 nginx-rtmp模块中next_xxx方法调用链学习笔记
next_xxx方法管理 在nginx的rtmp模块的各个子模块中,我们会看见有很多的next_xxx方法的回调方法,例如next_play或者next_publish,他们调用的是什么方法?又是怎样赋值的呢? 我们使用next_publish回调方法进行说明: 首先,我们看一下该函数的定义,我们可以在各个会使用他的模块中都看到一个static的定义的全局回调方法:static ngx_rtmp_publish_pt next_publish; 在C语言中,stat
2021-03-13 11:03:34 284
原创 rtmp协议
RTMP协议基础知识RTMP协议定义:RTMP的全称为Real Time Message Protocol,即实时传输协议;它是基于TCP协议之上的一个应用协议;应用场景:他是adobe公司开发的用于客户机和服务器之间实时传输音频和视频实的一个协议;目前广泛应用于直播领域协议格式介绍: 在RTMP协议中存在message和chunk的概念;message是指一个需要传输的数据,<br>而当数据过大之后,不能再一个协议包中传输,这样的话,就需要将这个数据分多次传输到对端去,
2021-03-13 08:32:46 514
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人