SRS是单线程多协程的网络架构。state thread是有栈的用户态线程,分配了栈内存,针对芯片架构比如arm,x86做了适配。
为什么用协程呢?epoll是回调方式读写数据的,rtmp信令交互消息很多,很多不同的状态,处理起来麻烦。
1 rtmp边缘集群--即多edge/单origin模式
客户端向edge服务器推流,edge服务器向origin服务器推流,因为其它客户端可能向其它edge服务器拉这路流。
客户端向edge服务器拉流,edge服务器向origin服务器请求流,即使自己有。这就是回源拉流。
2 rtmp源站集群、origin cluster有区别吗?
#464:源站A、源站B,向源站A推流,向源站B推流失败。
源站B向源站A发送http消息,应答了200ok。origin之间通过http通信,询问流是否存在。
即使没有那路流,也是应答200ok。
有走到SrsRtmpServer::redirect,但没抓到rtmp 302重定向包。
rtmp 302的包是这样的。
源站A、源站B,edge,向源站A推流,向源站B推流失败。(edge服务器就不是这个作用)
为什么增加多个origin服务器,即origin集群模式?
单个origin服务器支撑不了10k个客户端访问。比如大主播,淘宝直播间不止10k用户观看。
源站A、源站B,edge C,edge D,向edge C推流,向edge D拉流成功。
edge D尝试向每一个源站拉流。