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
相关推荐
在.NET编程环境中,C#语言提供了丰富的库支持网络通信,其中Socket是进行低级网络通信的基本组件。本资源“C# socket封装类和组件含例程全部开源”提供了一套全面且强大的C# Socket封装,旨在简化开发过程,提高代码...
- 首先,服务端需要创建一个Socket,指定协议类型(通常为TCP)和地址族(如AF_INET表示IPv4)。 - 使用bind()函数将Socket与特定的IP地址和端口关联,通常是“0.0.0.0”表示任何可用的IP地址,和一个未使用的端口...
Socket,又称为套接字,是网络编程中的一个重要概念,它是不同进程间通信的一种机制,不仅可以应用于同一台计算机上的进程间通信,还可以跨越网络环境,让位于不同计算机的进程进行数据交换。Socket 是构建在传输层...
它是网络编程中的一个抽象概念,可以看作是两个网络应用程序之间的一个双向通信链路。在C/S架构中,服务器端创建一个监听SOCKET,等待客户端的连接请求;客户端则创建一个连接SOCKET,尝试连接到服务器。一旦连接...
在IT领域,网络通信是应用程序之间...总之,"Qt上应用TcpSocket通信协议"这个项目为你提供了一个基础的TCP通信示例,通过学习和实践,你可以更好地理解和掌握Qt中的网络编程,为开发复杂的分布式系统打下坚实的基础。
描述中提到的是两个Win32应用程序,一个是UDP服务器,另一个是UDP客户端。它们在本地机器上通过8888端口进行通信。这意味着我们将了解如何在Windows环境下创建基于UDP的服务器和客户端应用,以及如何配置和使用端口...
- 创建SOCKET:使用`pbsock.CreateSocket()`方法创建一个SOCKET对象。 - 连接服务器:`pbsock.Connect()`方法用于连接到指定IP地址和端口号的服务器。 - 发送数据:使用`pbsock.SendData()`方法将数据发送到连接...
Socket底层协议Dll是计算机编程中用于网络通信的重要组件,它基于DLL(动态链接库)形式提供服务,使得应用程序能够实现跨平台的网络数据传输。DLL文件是Windows操作系统中的一种共享库,它包含了一系列预编译的函数...
Delphi 7 中用 Indy 开发 Socket 应用程序 Delphi 7 中用 Indy 开发 Socket 应用程序是基于 Indy 组件的 TCP ...Indy 是一个功能强大、灵活的 Internet 组件集,可以帮助开发者快速开发高质量的 Socket 应用程序。
1. 创建Socket:首先,通过new关键字实例化一个Socket对象,指定使用的协议类型,如SocketType.Stream代表TCP,SocketType.Dgram代表UDP。 2. 连接服务器:对于TCP,使用Socket对象的Connect方法连接到服务器;对于...
总之,“C# Socket封装类和组件源码”是一个很好的起点,它将帮助初学者快速理解网络编程的基础,并为更高级的网络应用开发打下坚实的基础。在实际操作中,你可以逐步分析并运行源码,加深对Socket编程的理解,并...
1. **创建Socket对象**: 使用`System.Net.Sockets.Socket`类实例化一个Socket对象。 2. **选择协议类型**: 设置Socket的协议类型(TCP或UDP)和地址族(如IPv4或IPv6)。 3. **绑定端口**: 使用`Bind()`方法将Socket...
5. **HpSocket**:这是一个专门用于网络编程的C++组件,它为开发者提供了简单易用的接口来实现TCP和UDP通信,包括服务器端和客户端的应用。 在【压缩包子文件的文件名称列表】中,我们看到的是一个特定版本的HP...
标题 "D7 SOCKET 应用演示" 暗示了这是一个使用 Delphi 7 进行网络通信的实例,特别是涉及 Socket 编程。Socket 是一种在不同计算机间进行网络通信的基本接口,允许应用程序通过互联网发送和接收数据。Delphi 7 是一...
SuperSocket是一个轻量级、高度可扩展的.NET Socket服务端开发框架,它简化了基于TCP/IP通信的应用程序的开发过程。以下将详细阐述这个项目中的关键知识点: 1. **C#编程语言**:C#是微软开发的一种面向对象的编程...
同时,通过抽象出一个通用的Socket通信框架,可以方便地扩展到不同的应用场景,例如服务器与客户端之间的命令响应、文件传输等。 总的来说,C#中的Socket通信协议设计需要考虑网络通信的基本原理,如TCP/IP协议栈的...
TServerSocket则在特定端口监听,等待客户端的连接请求,接收到请求后,可以创建一个新的TClientSocket实例来处理每个连接。 三层架构的关键在于各层之间的解耦。表现层不应直接访问数据访问层,而是通过调用业务...
本项目中,我们关注的是一个使用QT库实现的简单Socket5协议客户端。QTCPsocket是Qt库中的一个关键组件,专门用于处理TCP套接字连接,而QThread则是用来实现多线程编程,提升程序性能和响应性。 首先,让我们深入...
对于每个客户端连接,都会创建一个独立的线程类实例,如 `TUTcpLink`,这个线程负责处理与该客户端的数据交互,并且可以在内部实现同步机制来共享数据。这种方式提高了并发处理能力,确保了服务器端的稳定性。 组件...
本示例中的"qtsocket协议互发数据"是一个利用Qt库实现的TCP socket通信实例,它包含两个程序:client和server,用于演示如何在客户端和服务器之间双向交换数据。 首先,让我们深入了解TCP套接字的工作原理。TCP建立...