开源流媒体云视频平台EasyDarwin中EasyCMS服务是如何进行命令转发和消息路由的

EasyCMS介绍

EasyCMS做为EasyDarwin开源流媒体云平台解决方案的一部分,主要进行的是设备的接入和Session(DeviceSession & ClientSession)管理,同时用户也可以复用做为其他类型项目设备接入与管理的框架,EasyCMS也源于EasyDarwin服务架构,具备一套完整的网络I/O框架以及Utility,开发者很容易在EasyDarwin的基础上开发跨平台服务程序,例如Windows、Linux、Mac、Solaris等系统平台,只要一次熟悉,将会受用终身;

EasyCMS目前在系统中的一个主要功能就是接收EasyClient客户端的RESTful接口请求,然后内部查找对应的具体设备Session,将控制命令(如开始视频直播推送、PTZ动作命令、停止直播流等)通过查找到的DeviceSession发送到具体的设备,DeviceSession收到设备命令的响应后,还需要将响应中的数据结果返回给对应的ClientSession,再由ClientSession响应给客户端设备;

问题描述

如何进行高效率的消息路由,一直是我们在讨论的问题,这里面涉及到几个问题: 
1. 服务器如何在内部维护大量已发出的消息请求? 
2. 消息响应如何回调反射到对应的ClientSession? 
3. 消息超时不响应,EasyCMS服务器中消息请求如何释放,ClientSession如何超时释放?

我们原来的构思中,在每一个DeviceSession中维护一个已发送消息的MsgQueue,其中的每一个Element为一个包含:消息源ClientSession、消息内容、消息Sequence的结构单元,消息发送出去之后,MsgElement将加入DeviceSession::MsgQueue队列,当设备有具体的消息响应之后,再根据具体的消息Sequence遍历查找DeviceSession::MsgQueue队列,找到对应的MsgElement,再通过MsgElement::ClientSession将响应结果发送给客户端; 
看似整个设计流程是比较合理的,也解决了消息路由的问题,但是这里会有几个比较严重的问题:每一个DeviceSession维护一个MsgQueue,在系统设备量和客户访问量巨大的时候,可能每一个DeviceSession会维护一个很长的MsgQueue,那么在有消息响应的时候,查找对应的MsgElement就会非常耗时好效率,而且对超时没有得到响应的MsgElement,我们需要定期遍历维护MsgQueue进行处理,或者如果每一个MsgElement都加一个定时器,自己从Queue里面释放自己,释放流程也是非常复杂的;

解决方案

考虑到维护Queue在设备和客户端并发比较高的时候必然会造成非常大的效率消耗,我们通过在EasyDarwin云平台的协议的字段中加入From、Via、To字段来解决这个问题: 
1、当ClientSession通过DeviceSession向设备发送命令时:

From: <ClientSession SessionID>
Via: <EasyCMS ServiceID>
To: <DeviceSession SessionID>

2、当设备响应DeviceSession下发的命令时:

From: <DeviceSession SessionID>
Via: <EasyCMS ServiceID>
To: <ClientSession SessionID>

3、当DeviceSession收到响应后,根据To字段对应的ClientSession SessionID,在当前EasyCMS中维护的ClientSessionMap中查找对应的ClientSession,找到后,通过ClientSession进行具体消息的响应,ClientSession为自我维护一个Session的超时时间,超时时间内,没有任何数据请求或者发送的需求,ClientSession会自动析构,所以,如果根据ClientSession SessionID查找不到对应的ClientSession,该消息将自动丢弃;

4、在可靠的消息路由系统中,可以将发送的消息和收到的消息都入库到数据库中,进行消息的再次发送和响应的追溯;

那么按照上面的流程,系统能够非常高效地处理用户的请求和设备的消息,避免了大量的锁处理,结构简单,且可扩展性非常强;

获取更多信息

Github:https://github.com/EasyDarwin

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2016

开源流媒体云视频平台EasyDarwin中EasyCMS服务是如何进行命令转发和消息路由的相关推荐

  1. EasyDarwin开源流媒体云平台之语音对讲功能设计与实现

    本文由EasyDarwin开源团队成员Alex贡献:http://blog.csdn.net/cai6811376/article/details/52006958 EasyDarwin云平台一直在稳 ...

  2. 基于EasyDarwin云视频平台的幼儿园视频直播(手机直播/微信直播)解决方案

    一.方案介绍 1.1.方案背景 在2016年10月25日至28日的安博会上,我们看到了不少的幼教平台厂商,我们注意到大部分的幼教平台,为了追求极佳的用户体验,在微信或者APP端能够做到极快的打开速度, ...

  3. 暴风云视频平台SDK使用介绍(四)-- 视频播放(Android)

    在<暴风云视频平台SDK使用介绍(三)-- 视频播放(IOS)>中,介绍了如何使用IOS平台的播放SDK快速构建一个APP,实现视频点播的功能.在本篇中,我们来看看使用暴风云视频提供的An ...

  4. 暴风云视频平台SDK使用介绍(一)-- 概述

    暴风影音推出了自己的 云视频平台 ,提供了视频存贮,转码以及播放等服务,你可以借助这个平台创建自己的视频应用. 我们将通过一系列文章对此进行介绍 概述 文件上传 网页播放 手机播放 概述 为什么要使用 ...

  5. 暴风云视频平台点播SDK使用介绍(三)-- 视频播放(IOS)

    本教程介绍使用暴风云视频 IOS平台 播放器的SDK,快速构建一个视频点播功能的APP. 下载SDK 访问暴风云视频平台官方网站的SDK页面,进入一站式视频点播,找到SDK for Objective ...

  6. FIT2CLOUD飞致云发布开源轻量级云管平台CloudExplorer Lite

    2023年4月21日,中国领先的开源软件公司FIT2CLOUD飞致云正式发布开源轻量级云管平台项目CloudExplorer Lite.CloudExplorer Lite(https://githu ...

  7. 构建云视频平台的七种武器分别包括长生剑、孔雀翎、碧玉刀、多情环、离别钩、霸王枪、拳头,这七种武器分别对应的是什么技术呢?该文将揭晓答案。

    云视频平台的七种武器 构建云视频平台的七种武器分别包括长生剑.孔雀翎.碧玉刀.多情环.离别钩.霸王枪.拳头,这七种武器分别对应的是什么技术呢?该文档将揭晓答案.

  8. 暴风云视频平台SDK使用介绍(二)-- 文件上传

    在 上一篇文章 里,我们对暴风云视频平台进行了简要概述.下面这篇文章里,我们将基于C# SDK来介绍文件的上传. 文件上传 注册帐号 如果还没有注册暴风云视频账号,先去免费注册一个. 下载SDK 访问 ...

  9. 暴风云视频平台SDK使用介绍(五)-- 文件上传(进阶)

    在 <暴风云视频平台SDK使用介绍(二)> 里,我们简单介绍了如何使用C# SDK上传文件.上文介绍的方法,虽然很简单,但也存在一些问题,比如 1. 不能断点续传,如果中途断开,下次还得继 ...

最新文章

  1. Python学习笔记-进度条
  2. 指针:调用自定义交换函数,完成三个数整从小到大排列
  3. 【题意分析】1024 Palindromic Number (25 分)_38行代码AC
  4. java enumset_java.util.EnumSet.allOf()方法和实例的学习
  5. fiddler设置https抓包
  6. mysql 错误 0152_SP2-1503 SP2-0152 错误解决
  7. jsp源码oracle数据库,JSP与oracle数据库交互案例
  8. 在服务器客户端怎么启用协议,如何启用客户机的WINS功能
  9. 【人脸检测】+【五官定位】基于MATLAB的人脸检测系统
  10. 【报告分享】2021快手内容生态半年报:从心出发.pdf(附下载链接)
  11. Filezilla server 使用教程
  12. 【学习笔记】成功解决:(字体问题)Package fontspec Error: The font “STXingkai“ cannot be found. \makecover
  13. flutter shared_preferences 异步变同步
  14. 关闭IE浏览器窗口时触发的动作js
  15. 计算机毕业设计项目推荐 - 毕设开题选题
  16. react 断网提示
  17. 嵌入式:Keil uvision5环境下创建一个工程模板(步骤超详细)
  18. 自我介绍以及未来规划
  19. CTFSHOW大赛原题篇(web726-web740)
  20. A. The Beatles

热门文章

  1. spring cloud bus_Spring Cloud学习笔记--消息总线(Bus)
  2. boost any 实现万能容器_全面剖析 C++ Boost 智能指针!| CSDN 博文精选
  3. 内核网络设备的注册与初始化
  4. Linux输入子系统:输入设备编程指南 -- input-programming.txt
  5. CPU的内部物理结构介绍
  6. 嵌入式Linux系统编程学习之六make工程管理和Makefile
  7. Java的String理解
  8. mysql syntaxerror_解析bitronix连接MySQL出现MySQLSyntaxErrorException错误的解决方法
  9. [转帖]公司内网机器病毒
  10. 使用WebService与Oracle EBS进行集成(下)