最近在维护一个电信的项目中间遇到了一些通信协议的东西。比如协议的实现等等。我总结了一些心得体会和大家分享一下。没有代码,只是一些思路。 通常情况下我们要用代码实现一个协议通常都要将这个协议看个2~3遍,只有对这个协议有了一定了解我们才能够用代码实现它,架构设计才能合理,维护起来才能比较容易。本文主要针对基于tcp/ip通信协议。<o:p></o:p>
首先我们要搞清下面几个问题:<o:p></o:p>
1.这个协议主要完成那些实际功能.例如对手机用户进行管理,或者查询手机用户信息等等<o:p></o:p>
2.支持TCP/IP协议还是UDP协议,如果支持TCP/IP协议,那么它是基于长连接还是短连接.
3.这个协议所定义的数据类型
4.协议包头(HEADER)的定义。
5.协议包体(BODY)的定义。
在说明实现过程之前,我们来了解几个概念:
数据包(PDU) - 通信协议中定义的数据包既通信数据。它主要包括请求和应答(TCP/IP)
包头(HEAD) - 通信协议中定义的数据包的一些重要的信息。如果包的长度,功能命令。
包体 – BODY包含一些为了完成HEADER中定义的功能所需要的一些数据。注意有的时候一个包是可以没有包体的。如:心跳包。
实现过程:
1. 实现协议所定义的基本的数据类型。如:定长字符串、整形的字节数组、协议定义的特殊数据类型。
2. 协议基本的常量,我们可以定义一个类或者接口来将协议中的常量统一的保存起来。但有些业务常量还是跟随业务类或者接口在一起比较好,具体情况具体分析。
3. PDU包装器和PDU解析器,在各种PDU使用。这个是我们实现这个协议的一个关键。
· PDU包装器 :这个类可以将协议的数据类型转换成字节数组,并保存在包装器中。我们用它来将我们包装的PDU中的信息装换成字节数组的形式,因为只有转化成字节数组的形式才能在网络上传输。
· PDU解析器:这个类可以将字节数组(通过socket inputstream读出来的)的信息解析包装成协议中定义的各种类型。这个类的工作过程是和PDU包装器反相的。
PDU包装器和PDU解析器都包含一个字节数组,并有一个可以移动的当前位置标志。数组的作用是保存pdu 字节信息,而位置标志用来记录当前读取位置或者当前转换位置。只有这样才能依次读取或者转换字节数组。
<o:p> </o:p>
4. 实现HEADER,在实现的过程中我们需要协议定义的一些特殊的数据类型,所以我们需要把这个步骤定义在后面。
5. 实现PDU,从面向对象设计的角度出发,我们首先要找出所有完成不同功能的PDU的公共部分(如相同的字段或相同的功能)抽象出来定义成接口、抽象类或者公共的基类(BASE CLASS),具体设计依照协议的具体定义。然后通过实现PDU接口或者继承公共的PDU抽象类或者基类来实现不同的PDU. 它应该有两个重要的方法:
1) Input Method :
将输入字节流(Socket InputStream )包装成当前的PDU对象,用于进一步处理。
2) Output Method
将当前的PDU对象转换成字节流的形式,用于通过(Socket OutputStream )在网络中传输。
6. PDU 管理器,用来读取和创建PDU.
<o:p> </o:p>
完成协议中的功能:我们可以通过发用消息包和得到消息包来完成协议功能。
下面介绍完成协议功能的步骤:
I. 创建请求对象
II. 根据不同功能设置 header的字段值
III. 保存header到请求对象中
IV. 根据header中设置的PDU的功能,保存功能必须的字段到请求对象中。
V. 发送请求对象字节流
VI. 得到响应对象
VII. 解析响应对象
VIII. 得到结果
上面总结了协议实现的思路、架构以及调用过程,希望能够对大家有所帮助,能够达到抛砖引玉的效果。
<o:p> </o:p>
分享到:
相关推荐
分布式系统的设计,是一门复杂的学问,它涉及到通信协议、远程调用,服务治理,系统安全、存储、搜索、监控、稳定性保障、性能优化、数据分析、数据挖掘等各个领域,对任何一个领域的深入挖掘,都能够编写一本篇幅...
2. 接口:接口定义了服务之间的通信协议,包括消息格式、调用方式等,确保不同服务间的无缝交互。 3. 服务注册与发现:服务提供者通过注册机制将自己的服务信息发布到服务中心,消费者则通过查找服务中心获取所需...
面向服务架构的产品设计资源共享系统通过将设计资源封装为Web服务,利用标准化的通信协议和技术手段,有效解决了远程设计资源的封装、发布和获取问题。这种设计思路不仅提高了设计资源的利用率和可维护性,还促进了...
FPGA往往用于扩展处理器的功能,提供高速接口转换,以适应不同的通信协议和数据速率。良好的接口设计能够确保系统与其他组件的无缝连接,提高系统的整体效率。 此外,可维护性和可测性是FPGA设计中不容忽视的方面。...
在IT行业中,Go语言因其高性能、并发能力强以及简洁的语法特性,被广泛应用于微服务架构的设计和实现。"Go-微服务架构游戏服务框架"是一个专门针对游戏开发领域的微服务框架,它允许开发者专注于业务逻辑,而不必...
在Windows平台上设计和实现串口通信系统是一项技术性较强的工作,涉及到硬件接口、软件编程以及通信协议等多个方面。本文将详细解析这一主题,包括串口通信的基本原理、Windows API的使用、程序设计与调试,以及如何...
**面向服务的架构**的核心思想是将应用程序的不同功能单元进行拆分,然后通过标准的接口和通信协议将这些功能单元连接起来以便随时调用。这里的接口采用了标准化的方式进行定义,因此无论实现这些功能单元的硬件平台...
RPC(远程过程调用)允许一台计算机上的程序调用另一台计算机上的程序,并且而不需要了解底层网络细节。 在软件设计思路方面,后端架构师需要了解和应用各种设计模式,比如工厂模式、单例模式、策略模式、观察者...
- **混乱的RPC调用协议**:统一RPC框架,如Dubbo或gRPC,提高服务间的调用效率和一致性。 - **SOA架构的问题**:引入服务网格技术,如Istio,简化服务间的交互和管理。 - **服务SLA的应用实践**:实施熔断、降级、限...
他们提出的设计思路是将机器视觉工具算法与软件框架分离,使得算法独立于具体实现,只需提供接口,而软件框架负责图像获取、算法调用以及数据传输到外部设备的整个流程。这种设计提高了软件的灵活性和模块化程度,...
微服务架构的实现思路: 1. 将大系统拆分成小型系统:微服务架构的核心思想是把大系统拆分成小型系统,从而降低系统的复杂性。 2. 设计微服务之间的协作关系:微服务架构需要设计微服务之间的协作关系,以确保...
##### 架构过程——以复杂系统为例 **1. 总体架构** - 定义整个系统的框架和关键组成部分,包括硬件、软件以及它们之间的交互方式。 - 确保系统能够在宏观层面满足所有需求,并为后续的分系统设计提供指导。 **2. ...
这种交互通常通过标准的Web通信协议实现,如HTTP,用户提交请求后,服务器端的Matlab程序接收参数,并执行仿真任务,最后将结果返回给用户。 ### 并行处理的优势 并行处理是一种通过同时执行多个计算任务来加快总体...
3. **协议抽象**:通过IDataStreamHelper接口实现对不同通信协议的支持。 4. **可插拔组件**:允许插入自定义的预处理和后处理逻辑,如加密、解密、验证等。 5. **稳定性与效率**:确保在高并发环境下,通信层能够...
《高级服务器设计和实现:架构、手段与工具箱》 在构建高效、稳定的高级服务器时,我们需要深入了解服务器架构、采用适当的手段和工具。本资料详尽地探讨了这一主题,旨在提供一个全面的指南,帮助IT专业人员优化...
3. **服务调用优化**:考虑到支付场景下的高并发需求,需要对服务调用过程进行优化,比如采用异步调用模式减少响应时间;使用断路器模式避免雪崩效应等。 4. **数据一致性保障**:支付系统中涉及到大量的资金流转,...