srs代码学习(5)--一些与运营相关的技术点

原创 2016年08月31日 10:33:51

和大规模运营相关的技术点。我想到的有下面四个

1)vhost

2) edge 

3) forword

4) log trace 

5)reload

6)http-api

7)  statis


下面来一个一个具体分析

vhost ,意思就是virtual host .虚拟主机的意思。可以在一台机器上支持不同的域名,用来分割用户或者是不同的功能。关于vhost的详细作用。在作者的这篇文章中有详细的说明

https://github.com/ossrs/srs/wiki/v1_CN_RtmpUrlVhost


下面我分析下代码中的实现。

vhost会随着connect 的命令连接上来。connect命令中有几个参数如下



抓个包看看具体都代表什么




app --应用名称

swfurl==tcurl,

那么在服务器上是怎么处理的呢?

在处理连接的函数里是这样的

int SrsRtmpConn::do_cycle()
函数里,首先通过connect,填充req里的数据

if ((ret = rtmp->connect_app(req)) != ERROR_SUCCESS) {
        srs_error("rtmp connect vhost/app failed. ret=%d", ret);
        return ret;
    }
接着就是一大堆的验证过程,首先从配置中解析host

 // discovery vhost, resolve the vhost from config
    SrsConfDirective* parsed_vhost = _srs_config->get_vhost(req->vhost);
    if (parsed_vhost) {
        req->vhost = parsed_vhost->arg0();
    }

然后打印并做判断是否host相关参数为空

srs_info("discovery app success. schema=%s, vhost=%s, port=%s, app=%s",
        req->schema.c_str(), req->vhost.c_str(), req->port.c_str(), req->app.c_str());
    
    if (req->schema.empty() || req->vhost.empty() || req->port.empty() || req->app.empty()) {
        ret = ERROR_RTMP_REQ_TCURL;
        srs_error("discovery tcUrl failed. "
            "tcUrl=%s, schema=%s, vhost=%s, port=%s, app=%s, ret=%d",
            req->tcUrl.c_str(), req->schema.c_str(), req->vhost.c_str(), req->port.c_str(), req->app.c_str(), ret);
        return ret;
    }


再次做详细的检测

 // check vhost
    if ((ret = check_vhost()) != ERROR_SUCCESS) {
        srs_error("check vhost failed. ret=%d", ret);
        return ret;
    }

int SrsRtmpConn::check_vhost()
{
    int ret = ERROR_SUCCESS;
    
    srs_assert(req != NULL);
    
    SrsConfDirective* vhost = _srs_config->get_vhost(req->vhost);
    if (vhost == NULL) {
        ret = ERROR_RTMP_VHOST_NOT_FOUND;
        srs_error("vhost %s not found. ret=%d", req->vhost.c_str(), ret);
        return ret;
    }
    
    if (!_srs_config->get_vhost_enabled(req->vhost)) {
        ret = ERROR_RTMP_VHOST_NOT_FOUND;
        srs_error("vhost %s disabled. ret=%d", req->vhost.c_str(), ret);
        return ret;
    }
    
    if (req->vhost != vhost->arg0()) {
        srs_trace("vhost change from %s to %s", req->vhost.c_str(), vhost->arg0().c_str());
        req->vhost = vhost->arg0();
    }
    
    if ((ret = refer->check(req->pageUrl, _srs_config->get_refer(req->vhost))) != ERROR_SUCCESS) {
        srs_error("check refer failed. ret=%d", ret);
        return ret;
    }
    srs_verbose("check refer success.");
    
    if ((ret = http_hooks_on_connect()) != ERROR_SUCCESS) {
        return ret;
    }
    
    return ret;
}
这样经过严格的检测后,确认vhost是需要的host,就可以开始走下一步了。


3) edge 集群。

单独用一篇文章来分析。比较复杂





SRS(simple-rtmp-server)流媒体服务器源码分析--启动

SRS(simple-rtmp-server)流媒体服务器源码分析--系统启动

srs之http_hooks

在我看来srs内嵌的http完全可以取代nginx。废话少说,先说如何使用: 编译的时候必须开启相关选项 [root@localhost trunk]# ./configure --disab...

srs之防盗链配置及使用

防盗链 防盗链的功能基本使用HTTPCallback来实现  那httpcallback是咋回事呢,就是在srs中某个事件发生的时候,srs会回调相应的url,并且将相关的信息post上去,然...

SRS中增加身份验证

作为一个rtmp服务器,基本的验证机制是需要有的,srs很巧妙的使用了http callback的方式来实现验证机制,我测试的情况如下: 1)首先,在服务器上,使用了如下配置: li...
  • wishfly
  • wishfly
  • 2016年11月15日 01:16
  • 858

srs之防盗链配置及使用

防盗链 防盗链的功能基本使用HTTPCallback来实现  那httpcallback是咋回事呢,就是在srs中某个事件发生的时候,srs会回调相应的url,并且将相关的信息post上去,然...

rzsz的编译安装及SecureCR下Zmodem传输用法

rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具 优点:比ftp命令方便,而且服务器不用打开FTP服务。SecureCR下的文件传输协议有ASCII、Xmodem...

srs代码学习(6)--如何实现edge

sre集群的方式有两种一种是forword类型的。一种是edge-origin类型的。后者比前者要复杂的多。就从比较难的开始分析。 有实现edge,首先得在配置文件中做配置。配置方式如下 这个...
  • ddr77
  • ddr77
  • 2016年09月06日 10:51
  • 1860

srs代码学习(1)--listen建立过程

srs的服务侦听的建立过程。 以rtmp服务为例 srs服务侦听的建立依靠从上到下的三个类。分别是 SrsServer   SrsStreamListener   SrsTcp...

srs代码学习(9)----http_api处理流程

srs提供http相关功能。包括http_server http_api查询功能和http_heartbeat ,http_callback等。 首先分析http_api,这个提供一系列的http的...
  • ddr77
  • ddr77
  • 2016年09月13日 11:06
  • 2689
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:srs代码学习(5)--一些与运营相关的技术点
举报原因:
原因补充:

(最多只允许输入30个字)