Janus网关的集成与优化( 五 )


二是确保Janus服务配置中,ice_tcp=false 。这是在使用TCP穿透时所需要收集的端口,在实际应用中很少用到,所以将其设置为“false”禁止掉就可以 。
其次,把glib内的poll调用改为epoll. 可以采用两种方式 :一是修改glib代码,把事件处理的poll调用替换成epoll. 这种方式需要把glib代码拉下来修改并测试,整个工作需要比较长的时间;二是采用github上第三方的扩展实现。
4.2 端口优化

Janus网关的集成与优化

文章插图
 
对于端口优化,我们采用了端口复用方案. 实现端口复用的情况下, 可以做到减少端口使用, 同时降低CPU使用率 。具体的方法如下, 首先在Janus上接管ICE的处理,通过SDP中的ICE用户名参数来识别发送端身份 。在上文提到的P2P连接建立的过程中,首先要经历ICE认证的过程,在认证消息里包含了用户名信息,而用户名信息是通过SDK的的ICE参数来传递给对方的,因此可以在用户名中添加业务标识的内容,然后在ICE握手的过程中识别出对方的身份,然后将身份和发送的IP地址关联,这样只要对方发送消息我们就可以知道是谁发送的,从而实现端口复用 。
在实现单端口方案的过程中, 采用epoll来实现描述符事件管理,去掉对libnice和glib的依赖 。最终可以通过单一(或少量)的端口对外提供网关的服务,同时降低CPU的消耗 。
在方案实施后, 同样的场景下, CPU占用从30%降到了10%左右, 仍然有点高, 不过已经好很多了 。
相比前面的几种方案,这种方案会复杂很多,首先需要实现ICE逻辑并在Janus Core中把libnice替换成自实现方案,同时还需要实现相关的辅助结构,如ICE定时器等, 总体来看有一定的工程复杂度,但从效果上来说是值得一做的 。

【Janus网关的集成与优化】


推荐阅读