SDDS(Stream Data Dynamic Structure)
流数据动态结构处理包
?
? ? ——格式化的二进制流的编码与解码的通用组件。
?
}
?
===========
为什么SDDS?
===========
?
当我们使用WorkerMan或者Swoole编写
基于TCP或UDP的二进制通讯应用时,WorkerMan或者Swoole仅解决了二进制数据包的收发。通常,针对不同的应用层协议,比如,JT808,ModBus等,均需要编写不同的数据包编码与解码程序。并且,对于这些程序,由于算法的复杂和协议的多样性,程序几乎是没有可重用性的。
当然,你也可以使用google protocol Buffer来实现编码与解码,但这一做法却改变了数据包的结构,并且,一些特殊硬件或协议也不方便使用protocol Buffer。
不过,现在有了SDDS,(Stream Data Dynamic Structure),使用SDDS,你只要使用JSON定义一下Scheme,额外增加一些扩展函数,那么,应用层协议的编码与解码程序就完成了。
由此可见,SDDS解决了应用层通讯协议的组件化与可重用性的问题。不仅提升了开发速度,同时也大大提升了程序的可重用性,可扩展性和可维护性。
简单来说,SDDS简化了Socket通讯应用开发中最复杂的一层,即应用协议层编码与解码程序的开发。
使用SDDS,你甚致可以在一套应用中支持多套应用层协议。
使用SDDS,将会大大提升php针对不同二进制通讯应用协议的通讯应用开发速度。
?
======================
SDDS与protobuf,kaitai的不同
======================
?
并且,与protocol Buffer不一样的是,Scheme编写完成后即可立即使用。不需要编译,同时,绝不改变通讯协议规定的传输结构。所以,可以广泛用于IoT,JT808,ModBus,zigbee,OBD II等各种二进制应用协议。
过去,不同的应用层协议需要有不同的编解码程序。现在,使用SDDS,所有通用的编解码均由SDDS完成了,所有不同的只是各自有不同的基于JSON定义的Scheme.
SDDS也可用于二进制格式文件的读取,比如,PDF,MP3等。与同类的开源Kaitai不同的是,SDDS一样不需要编译,并且,由于SDDS使用的是动态数据结构定义方式,所以,任何一种数据的处理的流程均可以通过Scheme定义。使用SDDS,只要简单定义Scheme和相应扩展函数即可,远比kaitai方便。
所以,SDDS不只是通用的应用层二进制编码与解码程序,同时也是用于格式化的二进制流数据编码与解码的简单易用的组件。
?
总而言之,SDDS作为二进制通讯应用协议层快速开发和格式化二进制读写的快速开发解决方案,具有以下优势:
1, SDDS可以广泛应用于各类基于应用层二进制通讯协议的Socket服务器端应用的开发,包括但不限于工业自动化控制,物联网等各种应用协议,比如,modbus,zigbee,jt808等等。
2, 简单易用,开发效率明显提升。
3, 动态结构,编码解码流程完全由Scheme定义。
4, 无需编译。Scheme即写即用。方便程序修改与扩展。
5, SDDS不仅可以用于通讯应用,同时也可用于其它二进制格式流数据的读写。
?
关于SDDS详细介绍,参见:
https://github.com/byteferry/sdds
SDDS的php组件,参见:
https://github.com/byteferry/sdds_php
?