`
bardo
  • 浏览: 371901 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D1407912-ab64-3e76-ae37-b31aa4afa398
浅述PHP设计模式
浏览量:11599
9d6df9f7-91da-3787-a37c-0e826525dd5d
Zend Framewor...
浏览量:9972
85b628bd-a2ed-3de2-a4b1-0d34985ae8b6
PHP的IDE(集成开发环...
浏览量:9332
社区版块
存档分类
最新评论

PHP流数据动态结构处理包简介

    博客分类:
  • PHP
阅读更多

SDDSStream Data Dynamic Structure

PHP流数据动态结构处理包

用途

应用层二进制通讯协议编码与解码的通用组件

格式化的二进制流的编码与解码的通用组件

简介

         PHP Socket(WebSocket)通讯开发两大难点,第一是通讯层,第二则是应用协议解析层。现在,因为有SwooleWorkerMan两大通讯层组件,所以,通讯层已变成了开箱即用。但是,对于通常基于二进制的应用层协议,诸如ModBus, Zigbee, JT808等各类二进制通讯协议,其针对协议的数据包的解码与编码仍是一大难点。

         并且,在这一领域,Google Protocol Buffer无法使用,Kaitai也不易于使用。而SDDS则是一个支持应用层二进制通讯协议编码与解码的通用的快速开发组件。通过SDDS,你只需要根据通讯协议以及SDDS Schema的语法简单定义对应的Schema,除外,只要增加一些必要的扩展函数,通讯程序即已完成。

为什么SDDS?

当我们使用WorkerMan或者Swoole编写基于TCPUDP的二进制通讯应用时,WorkerMan或者Swoole仅仅解决了二进制数据包的收发。通常,针对不同的应用层协议,比如,JT808ModBus等,均需要编写不同的数据包编码与解码程序。并且,对于这些程序,由于算法的复杂和协议的多样性,程序几乎是没有可重用性的。

当然,你也可以使用Google Protocol Buffer来实现编码与解码,但这一做法却改变了数据包的结构,并且,一些特殊硬件或协议也不方便使用Protocol Buffer

不过,现在有了SDDS,(Stream Data Dynamic Structure,使用SDDS,你只要使用JSON定义一下Scheme,除外,只要增加一些扩展函数,那么,应用层协议的编码与解码程序就完成了。

由此可见,SDDS解决了应用层通讯协议的组件化与可重用性的问题。不仅提升了开发速度,同时也大大提升了程序的可重用性,可扩展性和可维护性。

简单来说,SDDS简化了Socket通讯应用开发中最复杂的一层——应用协议层编码与解码程序的开发。

使用SDDS,你甚至可以在一套应用中支持多套应用层协议。

使用SDDS,将会大大提升php针对不同二进制通讯应用协议的通讯应用开发速度。

SDDSProtocol Buffer以及Kaitai的比较

         Protocol Buffer简单来说是一个基于ID别名压缩数据长度的二进度的JSON。也就是一个JSON的增强版,使用Protocol Buffer则要改变二进制通讯协议原定的数据存储结构。Protocol Buffer可以很好的增强WebSocket的传输速度,以及新型的基于Protocol Buffer格式传输的协议。但无法处理JT808ModBuszigbeeobd等标准的二进制协议。

Protocol Buffer不一样的是,Scheme编写完成后即可立即使用。不需要编译,同时,绝不改变通讯协议规定的数据包格式与变量存储结构。所以,可以广泛用于各类IoTJT808ModBuszigbeeOBD II等各种二进制应用协议。同时也可以用来升级老程序。

过去,不同的应用层协议需要有不同的编解码程序。现在,使用SDDS,所有通用的编解码均由SDDS完成了,所有不同的只是各自拥有和各自不同的基于JSON定义的Scheme.

同类的开源Kaitai也是一个格式解析的DSL,但由于本身设计的问题,对协议本程的动态流程支持不足。但对文件流的处理能力则很强。

SDDS也可用于二进制格式文件的读取,比如,PDFMP3等。与同类的开源Kaitai不同的是,SDDS一样不需要编译,并且,由于SDDS使用的是动态数据结构定义方式,所以,任何一种数据的处理的流程均可以通过Scheme定义。使用SDDS,只要简单定义Scheme和相应扩展函数即可,远比Kaitai方便。

所以,SDDS不只是通用的应用层二进制编码与解码程序,同时也是用于格式化的二进制流数据编码与解码的简单易用的组件。

总之,SDDS作为二进制通讯应用协议层快速开发和格式化二进制流数据读写的快速开发解决方案,具有以下优势:

1,    SDDS可以广泛应用于各类基于应用层二进制通讯协议的Socket服务器端应用的开发,包括但不限于工业自动化控制,物联网等各种应用协议,比如,modbuszigbeejt808等等。它就是一个通用二进制协议的解析器。

2,   SDDS完遵循应用二进制协议数据包的存储结构。所以,用它也能升级老程序。

3,    简单易用,开发效率明显提升。

4,    动态结构,编码解码流程完全由Scheme定义。

5,    无需编译。Scheme即写即用。方便程序修改与扩展。

6,    SDDS不仅可以用于通讯应用,同时也可用于其它二进制格式流数据的读写。

7,    SDDS可以方便地让一个平台同时支持多个协议。

附录

关于SDDS详细介绍,参见:

https://github.com/byteferry/sdds

SDDSphp组件,参见:

https://github.com/byteferry/sdds_php

分享到:
评论

相关推荐

    php权威编程

    PEAR创始人Stig Saether Bakken,PHP核心贡献者Derick Rethans三大高手合力而作:本书几乎囊括了PHP 5所有的新特性,包括PHP 5所有的新功能,PHP 5的面向对象编程方法和设计模式,以及PHP 5的新的数据库连接处理、...

    PHP程序开发范例宝典III

    实例033 根据数据表结构自动生成数据录入页面 45 实例034 投票系统中单选按钮与复选框的应用 47 2.3 下拉列表的应用 50 实例035 在下拉菜单中显示数据表某列的字段值 50 实例036 在下拉菜单中显示数组中的...

    PHP+TXT站点管理系统0.8版

    7、数据结构无关性,智能处理。 8、经过本次修改后,测试运行速度更快。(前一版第二次首页访问时间为430毫秒,本版首页达370毫秒。--本机测试) 9、后台尚未修改,个别功能会出错。待开发。 2011年08月04日更新...

    精通sql结构化查询语句

    4.1.1 数据表的结构 4.1.2 数据表的种类 4.2 创建数据表 4.2.1 创建数据表的语句结构 4.2.2 创建基本表 4.2.3 非空约束 4.2.4 DEFAULT指定缺省值 4.3 修改数据表 4.3.1 修改数据表的语句结构 4.3.2 给数据表增添新列...

    java开源包8

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包4

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    JWFD1.01工作流系统(08升级版)

    JWFD申请到一个论坛专区,希望大家对JWFD的数据结构和设计有什么意见和建议,包括BUG都可以到这个地方来提交 地址是 http://www.openjweb.com/bbs/forum.php?mod=forumdisplay&fid=61 jwfd 工作流设计器V0.91 ...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写PHP。 PHP代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP是完全免费的,不用花钱,你可以从PHP官方站点...

    java开源包1

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包2

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包3

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包11

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包6

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包5

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包10

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包7

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包9

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    java开源包101

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    Java资源包01

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    EaglePHP框架1.9

    13、修改Model数据模型类支持对请求数据进行插入和更新的预处理和后处理回调函数。 14、修改默认入口文件将apache_get_modules函数改为在phpinfo中获取mod_rewrite模块是否安装。 15、优化Exception处理机制,抛出...

Global site tag (gtag.js) - Google Analytics