基于SocketCluster的移动Web视频会议设计与实现

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:l123654123654
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:针对使用传统的软件架构无法使用超大并发实时应用的性能需求,采用了全新的异步非阻塞工作模式的Node.js平台和在其基础上的支持集群功能的实时传输框架SocketCluster实现了工作在移动平台上的Web视频会议系统。该系统能支持CPU多核以及多服务器的集群下的可伸缩性,以适应实时应用系统对性能的需求。测试证明采用以上平台开发的实时系统性能优越,为未来实时应用开发提供的经验和基础。
  关键词: 视频会议; 实时应用; Node.js; SocketCluster; 视频音频采集
  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)01-0208-03
  Abstract:Due to the traditional software architecture can not meet the performance requirements of large concurrent real-time applications, using the SocketCluster real-time transmission frame of the new non blocking asynchronous mode of Node.js platform and on the basis of the realization of the function of the cluster support Web video conferencing system work on mobile platform. The system can support the scalability of CPU multi core and multi server cluster, so as to meet the requirement of real-time application system.The test proves that the real time system developed by the above platform is superior to the experience and foundation for the future development of real time application.
  Key words: video conferencing; real-time application; Node.js; SocketCluster; video and audio collection
  1 概述
  目前市场上各个主流的视频会议系统[1]都基于企业内部的平台或私有云基础上,才能保证视频和音频的流畅传输,尤其是移动视频会议移动端基本上都运行在移动平台的原生App模式,需要会议参加者在自己的手机或平板上下载安装,使得系统的更新难以实时完成。同时在视频会议的设计与实现上,传统视频会议都采用基于多线程阻塞模式[2]的服务器框架如JavaEE或MS.NET,难以满足在大数据量、高并发情况下对视频会议实时性能要求。
  针对以上问题,本文采用专门支持高并发和实时性的Node.js[3]作为服务器平台,使用基于Noded的Express[4] Web框架和SocketCluster[5]实时通讯集群框架,结合客户端HTML5 Video[6]和Audio API[7]开发了纯Web模式的移动视频会议系统。
  该系统具有Web应用的优点,同时服务器端利用其多核和多CPU的特性,使用Socket集群模式来实现移动视频会议的多用户高并发和高性能的视频和音频传输。
  2 系统总体架构设计
  本移动视频会议系统采用Web工作模式,服务器采用Linux Ubuntu Server上运行Node.js,在Node平台上采用Express为Web服务器,为移动客户端提供视频会议Web页面的请求和呈现。
  系统的核心功能是参与会议的每个成员的视频和音频的传输,为支持多用户的实时数据传输,采用能支持Socket传输集群的SocketCluster框架在服务器端和客户端之间实现视频和音频数据的双向实时传输。
  客户端智能手机或平台利用内置的支持HTML5的浏览器,结合Google的Web框架AngularJS[8]和Twitter的Bootstrap[9]框架实现Web页面元素的渲染和数据绑定,并引入SocketCluster的客户端负责发送本地用户的视频和音频,以及接收其他用户发送的视频和音频,并使用HTML5 Audio API实现音频的合成和播放。系统的总体架构如图1所示。
  Node.js是基于JavaScript的轻量级的,高性能的用于开发现代移动和企业级应用的服务器平台。其核心特点是非阻塞,单线程,异步工作模式,特別适用于开发大量用户连接的高并发应用,目的是为解决传统的应用服务器,如JavaEE,MS.NET, PHP无法适用当连接超过10万的高并发场合。
  Express是基于Node.js平台的web应用开发框架,它基于Node.js的非阻塞和异步模式,可提供超高速的Web请求和响应处理,适合开发各种高并发的移动设备应用。
  SocketCluster是建立在Node.js平台的基于WebSocket协议的支持集群的实时通讯开源框架。它既支持竖向伸缩(多核CPU),也支持横向伸缩性(多个主机组建的集群)以适应超并发的密集的数据实时数据传输。
  在传输对象上,它既支持客户-服务器间传输,也支持客户之间的数据传输。在传输方式上同时支持请求/响应模式的点对点数据传输,也支持发布/订阅模式的群发群收功能,本系统正是利用此发布和订阅模式,在所有会议的参加者之间群发和群收视频和音频数据,实现双向的实时视频会议。   3 服务器端设计与实现
  服务器端主要实现Web服务器和Socket数据传输服务器两个核心功能。
  Web服务器采用Express框架,用于实现系统Web页面的响应服务,系统采用纯静态HTML5页面,通过AngularJS框架实现动态数据显示。
  数据传输采用SocketCluster5.0.19最新版,其支持Socket集群功能,可使用CPU的多核或多服务器集群运行在Node.js多线程模式,可更好地支持更多参与会议的用户的数据传输。
  Node.js自身工作在单线程工作模式,无法支持多CPU或多内核CPU,为能实现多CPU时的多线程Node,需要使用Node集群框架,SocketCluster是能支持此类特性的优秀集群框架。
  SocketCluster自身工作在如下3种线程下。
  1) 主线程:此线程执行SocketCluster的服务器启动和管理功能。
  2) 工作线程(Workers):启动多个Node.js实例对象,每个对象内有Event Lopp机制实现对事件的检测和处理。每个CPU内核运行一个Node线程,这个具有2个CPU且每个具有8核的服务器可运行16个Node实例,如此可处理超大量并发用户的请求处理。
  3) 代理线程(Brokers):该线程内执行一个代理服务对象,用于在各个工作线程间实现事件的共享。
  如下代码简要演示SocketClutser主线程了启动16个工作线程和1个代理线程。
  var SocketCluster = require(’socketcluster’).Socket Cluster;
  var socketCluster = new SocketCluster({
  workers: 16, brokers: 1, port:8000,
  appName: "mobilemeeting",
  workerController: __dirname ’/worker.js’,
  brokerController: __dirname ’/broker.js’,});
  在每个工作线程worker.js中用于启动一个Node及Express和SocketServer实例,用于Web服务和Socket传输服务,如下代码展示了工作线程的实现。
  var express = require(’express’);
  var serveStatic = require(’serve-static’);
  var path = require(’path’);
  var meetingvideo=require("./business/meetingvideo");
  var meetingaudio=require("./business/meetingaudio");
  module.exports.run = function (worker) {
  var app = express ();
  var httpServer = worker.httpServer; //启动Express Web服务器
  var scServer = worker.scServer; //启动Socket Server传输服务器
  app.use(serveStatic(path.resolve(__dirname, ’web’)));
  httpServer.on(’request’, app);
  //启动会议视频和音频传输模块
  meetingvideo.start(scServer);
  meetingaudio.start(scServer); };
  工作线程中通过worker对象创建HTTP服务器并集成Express,并启动视频和音频传输服务器。
  4 视频采集和传输实现
  SocketCluster内部实现了与Socket.io框架相同的Socket数据传输机制,它基于HTTP5的WebSocket协议实现双向实时的数据传输,用于高性能实时应用的开发。
  SocketCluster即支持客户端-服务器端的请求-响应的点对点传输模式,也支持基于发布/订阅模式的群发群收传输模式。本系统因为要支持多个会议参与者的双向实时通讯,采用的是发布/订阅模式的Socket传输,在Socket服务器上各个客户端端都订阅视频主题meeting.video和音频主题meeting.audio,当某个客户端发送視频或音频数据到此主题后,所有参与会议的客户端自动接收到该主题上的数据,实现视频和音频的显示和播放。如下代码简要演示了视频主题的编程,音频主题编程与之基本类似,不再赘述。
  module.exports.start=function(scServer){
  scServer.on(’connection’, function (socket) {
  socket.on("meeting.video",function(data){
  scServer.exchange.publish("meetimg.video.data",data);
  }); }); };
  Socket服务器通过监听数据到达事件,使用exchange.publish方法实现群发。由于该服务器工作在16线程下,可以处理大量的并发数据传输,得以实现高性能的移动Web视频会议系统。   5 客户端视频采集传输接收和显示实现
  客户端视频的采集使用HTML5的浏览器支持的getUserMedia方法取得摄像头的图像,并把实时采集的数据发送到本地页面中的
其他文献
目的观察长链非编码RNA CCAT2(lncRNA CCAT2)对肝细胞癌(HCC)细胞增殖和侵袭迁移能力的影响,并探讨其机制。方法将对数生长期的HCC细胞Hep G2随机分为A、B、C组,采用Lipofectamin
目的:探讨白血病抑制因子受体(LIFR)α亚基胞内游离功能域gp190CT3对启动靶细胞内信号转导通路(JAK/STAT3),使白血病细胞HL-60向粒细胞方向分化的作用。方法:采用免疫细胞化学、RTPCR
摘要:现阶段卫生院校计算机教学中培养学生创新能力已经成为主要的教学目标,教师要从思想上转变以往的教学理念,突出学生的主体地位,积极运用启发式教学方法,引导学生自主设计计算机程序和文档,充分发挥学生的主观能动性,潜移默化中提高学生的创新能力,从而推动学生全面发展。  关键词:卫生院校;计算机;创新能力  中图分类号:G642 文献标识码:A 文章编号:1009-3044(2017)22-0166-0