SDDS(Stream Data Dynamic Structure)
PHP流数据动态结构处理包
用途
应用层二进制通讯协议编码与解码的通用组件
格式化的二进制流的编码与解码的通用组件
简介
PHP Socket(非WebSocket)通讯开发两大难点,第一是通讯层,第二则是应用协议解析层。现在,因为有Swoole和WorkerMan两大通讯层组件,所以,通讯层已变成了开箱即用。但是,对于通常基于二进制的应用层协议,诸如ModBus, Zigbee, JT808等各类二进制通讯协议,其针对协议的数据包的解码与编码仍是一大难点。
并且,在这一领域,Google Protocol Buffer无法使用,Kaitai也不易于使用。而SDDS则是一个支持应用层二进制通讯协议编码与解码的通用的快速开发组件。通过SDDS,你只需要根据通讯协议以及SDDS Schema的语法简单定义对应的Schema,除外,只要增加一些必要的扩展函数,通讯程序即已完成。
为什么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与Protocol Buffer以及Kaitai的比较
Protocol Buffer简单来说是一个基于ID别名压缩数据长度的二进度的JSON。也就是一个JSON的增强版,使用Protocol Buffer则要改变二进制通讯协议原定的数据存储结构。Protocol Buffer可以很好的增强WebSocket的传输速度,以及新型的基于Protocol Buffer格式传输的协议。但无法处理JT808,ModBus,zigbee,obd等标准的二进制协议。
与Protocol Buffer不一样的是,Scheme编写完成后即可立即使用。不需要编译,同时,绝不改变通讯协议规定的数据包格式与变量存储结构。所以,可以广泛用于各类IoT,JT808,ModBus,zigbee,OBD II等各种二进制应用协议。同时也可以用来升级老程序。
过去,不同的应用层协议需要有不同的编解码程序。现在,使用SDDS,所有通用的编解码均由SDDS完成了,所有不同的只是各自拥有和各自不同的基于JSON定义的Scheme.
同类的开源Kaitai也是一个格式解析的DSL,但由于本身设计的问题,对协议本程的动态流程支持不足。但对文件流的处理能力则很强。
SDDS也可用于二进制格式文件的读取,比如,PDF,MP3等。与同类的开源Kaitai不同的是,SDDS一样不需要编译,并且,由于SDDS使用的是动态数据结构定义方式,所以,任何一种数据的处理的流程均可以通过Scheme定义。使用SDDS,只要简单定义Scheme和相应扩展函数即可,远比Kaitai方便。
所以,SDDS不只是通用的应用层二进制编码与解码程序,同时也是用于格式化的二进制流数据编码与解码的简单易用的组件。
总之,SDDS作为二进制通讯应用协议层快速开发和格式化二进制流数据读写的快速开发解决方案,具有以下优势:
1, SDDS可以广泛应用于各类基于应用层二进制通讯协议的Socket服务器端应用的开发,包括但不限于工业自动化控制,物联网等各种应用协议,比如,modbus,zigbee,jt808等等。它就是一个通用二进制协议的解析器。
2, SDDS完遵循应用二进制协议数据包的存储结构。所以,用它也能升级老程序。
3, 简单易用,开发效率明显提升。
4, 动态结构,编码解码流程完全由Scheme定义。
5, 无需编译。Scheme即写即用。方便程序修改与扩展。
6, SDDS不仅可以用于通讯应用,同时也可用于其它二进制格式流数据的读写。
7, SDDS可以方便地让一个平台同时支持多个协议。
附录
关于SDDS详细介绍,参见:
https://github.com/byteferry/sdds
SDDS的php组件,参见:
相关推荐
PHP可以通过配合RabbitMQ、Redis等消息队列或流处理技术,实现实时数据推送。 在实际操作中,项目的文件结构可能包含以下部分:HTML文件用于页面布局和包含jQuery及ECharts库;JavaScript文件用于前端逻辑,包括...
这个源码可能包含这样的数据结构设计,如工作流实例表、任务表、参与者表等。 `ThinkPHP`是一个知名的PHP框架,它为快速开发高效、稳定的Web应用提供了强大的支持。在这个工作流项目中,ThinkPHP可能是用来构建后端...
如果我们要在PHP中调用Java的jar包,可以创建一个类似的结构,比如创建一个`java_libs`目录,用于存储Java的jar文件。然后在PHP代码中通过特定方式加载这些jar包。 调用Java jar包的方法主要有以下几种: 1. 使用...
在这个场景中,jQuery被用来处理DOM操作,如动态加载表格数据和执行分页效果。 2. **JSON(JavaScript Object Notation)**:JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在...
本项目利用PHP作为服务器端语言处理数据,AJAX进行异步请求,实现动态加载瀑布流显示。 首先,PHP是服务器端脚本语言,负责处理数据和生成HTML响应。在本项目中,PHP文件可能用于连接数据库,查询图片或商品信息,...
瀑布流的核心在于利用JavaScript和Ajax进行动态加载,以实现用户滚动页面时自动加载更多内容的效果。 PHP是一种服务器端脚本语言,常用于构建动态网页。在本实例中,PHP可能被用来处理与数据库的交互,比如读取、...
总结起来,这个PHP实现的工作流设计方法注重实用性、灵活性和可扩展性,通过合理的数据结构和函数机制,实现流程的动态管理和执行。这样的设计对于构建高效的企业级工作流管理系统具有重要的指导价值。
总结,这个"php+mysql+json 瀑布流实例"是一个完整的Web应用程序,它演示了如何使用PHP和MySQL作为后端处理和存储数据,而前端则通过JavaScript和JSON实现动态加载和显示数据,形成具有吸引力的瀑布流布局。...
总之,解决LeetCode上的“数据流中的第K大元素”问题,不仅能够锻炼你的算法思维,还能加深对PHP编程语言的理解,尤其是在处理动态数据集和优化性能方面。通过分析和学习提供的PHP代码,你将能够更好地应对类似的...
在PHP中实现瀑布流程序,通常会涉及到前端JavaScript库如jQuery Masonry或Isotope,以及后端的数据获取和处理。 首先,我们需要理解PHP如何提供数据。在PHP中,你可以通过查询数据库(如MySQL)来获取图片或其他...
- **动态生成HTML**:PHP可以根据获取到的数据动态生成HTML结构,尤其是图片元素,这有助于在页面加载时减少网络请求。 2. JavaScript(jQuery): - **jQuery库**:jQuery是一个广泛使用的JavaScript库,简化了...
在瀑布流布局中,PHP可能负责处理数据库交互,获取和排序数据,如图片、文章等信息,然后以JSON或其他格式返回给前端。 AJAX(Asynchronous JavaScript and XML)是Web开发的一种技术,允许网页在不重新加载整个...
在这里,PHP用于处理服务器端的任务,如从数据库获取数据、处理用户请求等。了解PHP的基础语法、变量、数组、条件语句和循环是实现瀑布流的关键。 2. 数据库设计: 瀑布流通常需要从数据库中获取内容,如图片、...
MySQL是高性能、高可靠性的数据库系统,特别适合处理大量数据。它提供了SQL查询支持,事务处理,以及ACID(原子性、一致性、隔离性、持久性)特性,确保数据的一致性和完整性。MySQL的优化技巧,如索引使用、存储...
在本书中,你将学习到PHP的基本语法,包括变量、数据类型、控制结构(如if-else语句和循环)、函数以及错误处理等。此外,还将涉及面向对象编程的概念,如类、对象、继承和封装,这些都是现代PHP开发中的核心要素。 ...
在这个瀑布流应用中,Ajax用于动态加载更多内容,当用户滚动到底部时,通过Ajax发送请求到服务器获取新数据,然后在前端动态插入到页面中,提供流畅的浏览体验。 4. **社交分享功能**:应用集成了社交分享功能,这...
在PHP这个流行的服务器端脚本语言中,处理音频文件的元数据是一项重要的任务,特别是在开发音乐平台或媒体管理应用时。本文将深入探讨如何使用PHP来提取MP3、WAV、OGG和AIF这四种常见音频格式的元数据。 首先,我们...
5. **源代码组织**:良好的代码结构和注释至关重要,可以使用MVC(Model-View-Controller)架构来组织代码,使得模型层处理数据逻辑,视图层展示结果,控制器层协调两者。 6. **安全性**:除了防止SQL注入,还需...
**OpenCart 数据字段及框架结构** OpenCart 是一个流行的开源电子商务平台,因其用户友好和易于上手而受到新手开发者的欢迎。它基于PHP语言构建,使用MySQL作为数据库系统,为在线商家提供了一个功能丰富的购物车...