基于surging网络组件多协议适配的平台化发展
前言
Surging 发展已经有快6年的时间,经过这些年的发展,功能框架也趋于成熟,但是针对于商业化需求还需要不断的打磨,前段时间客户找到我想升级成平台化,针对他的需求我们讨论了很久,他的一些需求想法还是非常先进的,针对于现在surging 还有很多需要研发打磨,后面因为时间成本的关系我拒绝了他,我也打算后面慢慢的将surging升级为平台化以便支持物联网,流媒体等业务场景,可以通过统一定义,统一管理来配置构建各种业务场景,而web网关,设备网关,流媒体网关等各种类型的网关可以通过配置添加删除网络协议组件,以便可以支持多种协议适配,设配管理和配置规则引擎等业务场景。 今天所要讲的是以TCP组件为范本如何进行优化构建成平台化多协议适配。
构建TCP组件
首先来看看如何创建配置启动协议组件,以TCP协议组件为例,以下代码用于创建具有配置属性的TCP网络组件,并配置规则引擎脚本以解码消息
var config =new Dictionary<string, object>();
config.Add("script", @"parser.Fixed(4).Handler(
function(buffer){
var buf = BytesUtils.Slice(buffer,1,4);
parser.Fixed(buffer.ReadableBytes).Result(buf);
}).Handler(
function(buffer){parser.Fixed(8).Result(buffer);}
).Handler(function(buffer){
parser.Result('处理完成','gb2312').Complete();
}
)");
var network= serviceProvider.ServiceProvoider.GetInstances<INetworkProvider<TcpServerProperties>>().CreateNetwork(new TcpServerProperties
{
ParserType = PayloadParserType.Script,
PayloadType = PayloadType.String,
Host = "127.0.0.1",
Port = 322,
ParserConfiguration = config
});
network.StartAsync();
以下代码用于创建具有配置属性的TCP网络组件,并配置direct解码消息
var network1 = serviceProvider.ServiceProvoider.GetInstances<INetworkProvider<TcpServerProperties>>().CreateNetwork(new TcpServerProperties
{
ParserType = PayloadParserType.Direct,
PayloadType = PayloadType.String,
Host = "127.0.0.1",
Port = 321
});
network1.StartAsync();
还有两种类型的payload parser:fixedlength和delimited,这里就不依次说明了,直接通过添加更改ParserType属性就能配置相关的parse
创建Tcp服务
public class TcpService : TcpBehavior, ITcpService
{
private readonly IDeviceProvider _deviceProvider;
public TcpService(IDeviceProvider deviceProvider)
{
_deviceProvider = deviceProvider;
} public override void Load(string clientId,TcpServerProperties tcpServerProperties)
{
var deviceStatus =_deviceProvider.IsConnected(clientId); this.Parser.HandlePayload().Subscribe(buffer=>ParserBuffer(buffer));
} public override void DeviceStatusProcess(DeviceStatus status, string clientId, TcpServerProperties tcpServerProperties)
{
//throw new NotImplementedException();
} public async Task ParserBuffer(IByteBuffer buffer)
{
List<string> result = new List<string>();
while (buffer.ReadableBytes > 0)
{
result.Add(buffer.ReadString(this.Parser.GetNextFixedRecordLength(),
Encoding.GetEncoding("gb2312")));
} // var str= buffer.ReadString(buffer.ReadableBytes, Encoding.UTF8); var byteBuffer= Unpooled.Buffer();
byteBuffer.WriteString("\r\n", Encoding.UTF8);
byteBuffer.WriteString("处理完成", Encoding.GetEncoding("gb2312"));
await Sender.SendAndFlushAsync(byteBuffer);
buffer.Release();
// await Sender.SendAndFlushAsync("消息已接收",Encoding.GetEncoding("gb2312"));
this.Parser.Close();
} }
测试
规则引擎脚本解码测试

direct 解码测试

总结
最近忙着对于rtsp 进行bug 的修复和测试, 这样流媒体业务场景除了httpflv,rtmp 协议外,也能针对于rtsp协议的支持,协议之间互相也能进行转发, 对于rtsp 完成后,surging 将转继续优化构建平台化,年底也会陆续推出后台系统,基于Node-Red 可视化数据流的服务规则引擎编排。
基于surging网络组件多协议适配的平台化发展的更多相关文章
- 低代码平台--基于surging开发微服务编排流程引擎构思
前言 微服务对于各位并不陌生,在互联网浪潮下不是在学习微服务的路上,就是在使用改造的路上,每个人对于微服务都有自己理解,有用k8s 就说自己是微服务,有用一些第三方框架spring cloud, du ...
- 基于 SOA 的组件化业务基础平台
业务基础平台是业务逻辑应用和基础架构平台之间的一个中间层,解决 “应用软件的业务描述和操作系统平台.软件基础架构平台之间的交互与管理问题”.操作系统平台解决了“应用软件系统与硬件之间的交互与管理问题” ...
- 基于UML网络教学管理平台模型的搭建
一.基本信息 标题:基于UML网络教学管理平台模型的搭建 时间:2013 出版源:网络安全技术与应用 领域分类:UML:网络教学管理平台:模型 二.研究背景 问题定义:网络教学管理平台模型的搭建 难点 ...
- 基于SOA的组件化业务基础平台[转]
转自https://www.ibm.com/developerworks/cn/webservices/1111_xiaojg_soa/index.html 业务基础平台是业务逻辑和基础架构平台之间的 ...
- 对比iOS网络组件:AFNetworking VS ASIHTTPRequest
对比iOS网络组件:AFNetworking VS ASIHTTPRequest 作者 高嘉峻 发布于 2013年2月28日 | 7 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件 ...
- 三:基于Storm的实时处理大数据的平台架构设计
一:元数据管理器==>元数据管理器是系统平台的“大脑”,在任务调度中有着重要的作用[1]什么是元数据?--->中介数据,用于描述数据属性的数据.--->具体类型:描述数据结构,数据的 ...
- Lyft 基于 Flink 的大规模准实时数据分析平台(附FFA大会视频)
摘要:如何基于 Flink 搭建大规模准实时数据分析平台?在 Flink Forward Asia 2019 上,来自 Lyft 公司实时数据平台的徐赢博士和计算数据平台的高立博士分享了 Lyft 基 ...
- 【案例分享】SpreadJS金融行业应用实践,开发基于Web Excel的指标补录平台
SpreadJS作为一款基于 HTML5 的纯前端电子表格控件,以“高速低耗.高度类似Excel.可无限扩展”为产品特色,提供移动跨平台和浏览器支持,可同时满足 .NET.Java.App 等应用程序 ...
- 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2
基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2 Kubernetes实现Master-Slave分布式构建方案 传统Jenkins的Master-Slave方案的缺陷 Mas ...
随机推荐
- 阿里云场景化阿里云企业数字化转型售前方法PSA
阿里云场景化阿里云企业数字化转型售前方法PSA 目录 01 课程收获 理解企业数字化转型的概念.内涵.本质 了解企业数字化转型的要点.目标和切入点 掌握数字化转型项目售前阶段实践方法 场景化方案 阿里 ...
- 2015 年十佳 HTML5 应用
前言 优秀的前端工程师戴着脚铐跳舞,究竟能把 HTML5 的体验推进到什么程度? 这些 Web apps 是我们运营云集浏览器的网上应用店一年来,我选出的十佳 Web apps.其中参考了同事们的意见 ...
- 小小标签,强大功能——深藏不露的 <input>
<input> 虽只是一个看似简单的 HTML 表单元素,但它这么一个单一的元素,就有多达 30 多个属性(attribute),相信无论你是个小菜鸟还是像我一样写了 15 年 HTML ...
- python-使用函数求余弦函数的近似值
本题要求实现一个函数,用下列公式求cos(x)近似值,精确到最后一项的绝对值小于eps(绝对值小于eps的项不要加): cos(x)=0!x0−2!x2+4!x4−6!x6+... 函数接口定 ...
- python-计算素数和
本题要求计算输入两个正整数x,y(x<=y,包括x,y)素数和.函数isPrime用以判断一个数是否素数,primeSum函数返回素数和. 输入格式: 输入两个整数. 输出格式: [m-n]间的 ...
- java中接口到底是干什么的,怎么用,深入剖析
6.总结性深一层次综合剖析接口概念[新手可忽略不影响继续学习] 通过以上的学习, 我们知道,所有定义在接口中的常量都默认为public.static和final.所有定义在接口中的方法默认为publi ...
- ubantu系统之快捷键使用
1. 文件管理器中,目录切换为可以编辑的状态: ctrl + l 2. gedit 搜索 : ctrl + h
- java中如何求出2008年的第1星期星期一是几号?
题目8: 2008年的第1星期星期一是几号? import java.util.*; public class Test { public static void main(String[] ...
- CCF201409-3 字符串匹配
问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符:当选项关闭时,表示同一个字母的大写和小写 ...
- LC-202
编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和. 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 ...