我已经认识到一些问题,我问过去,如的这个真的可以归结为一个更根本的问题。

是否有任何熟知的设计模式为网络通信并凭借它的性质,协议结构/解析?谷歌搜索没有透露得多。

请注意,我不是在寻找任何给定的问题的解决方案,我正在寻找记录的设计模式处理网络通信及其议定书。

编辑:

请,不建议各种实现细节或除非它绑在设计模式讨论具体协议。协议的设计不是问题,它的设计模式,创建或对其进行解析我要找的,更不用说通信模式本身协议。

EDIT2:

我觉得很难相信,没有人来为网络通信的任何通用的模式。是的,我知道,“这取决于”,但你可以说,任何项目,但是仍有很多的模式,包括总体思路。

有帮助吗?

解决方案

我会说,责任链模式可能是有用的,以从/向网络发送/接收数据。

您建立一系列命令以发送到从客户端服务器。 每个命令通过责任的链进行处理,以增加的数据正确地处理该命令。

在数据发送时,链可以看起来像

Command   --> Wrap some       --> Encrypt --> Send data
to send       data around 
              the command 
              (source, extra 
              information if 
              needed)

在数据接收时,链可以是相似的,但周围的其他方法

Receive Data  -->  Decrypt --> Unwrap extra data --> Execute command

您可以检查此文章了解有关责任链更多的信息。 http://www.vincehuston.org/dp/chain.html

其他提示

这是一个非常宽泛的问题,它的治疗可能需要一个相当密集的书。

我不知道任何这样的资源自己,但让我们觉得这个通过,并考虑会是一个什么网络通信模式空间的尺寸:

连接方式:{基于连接的,无连接的}

相互作用器械:{同步,异步}

会话的复杂性:{命令响应,对话框}

消息形式:{自由流,半结构化的块,充分结构化的块} ..?

一个良好的开端是取TCP / IP协议族,它们映射到上述空间中,和看一看占据在上述协议中的独特位置的一个或多个试样的执行(多个) -characteristics模式空间。你最喜欢的* nix操作系统的源代码是看的好地方。

解析器实现将可能分为两大类:{命令交换处理,有限状态机}。

前者是(显然)两者的简单和容易的初步实现(除非你已经做过这样的事情)。

后者是(可能)更坚固,高效(在LOC而言),并且将允许采用变化的协议(如果它仍然是受设计变化)。

(底层(虚拟)OS联网设施(当然)还极大地影响实现采用JVM,例如:。NIO选择基于信道处理将工作很好地与FSM)

希望有所帮助。

我建议:抽象掉网络协议/ S

首先决定哪些功能,模块和它们之间的API。然后决定什么协议是数据要通过网络骑。

然后小心地封装在自己的层中的所有网络问题,以便以后可以申请加密,压缩,加HTTP传输(通过防火墙),或任何你想要的方式正交功能以后添加。

接受器/连接器模式: HTTP://www.cs.wustl。 EDU /〜施密特/ PDF / Acceptor.pdf

上GOF链responsabiliy滤波器基链,它在很多网络堆栈/框架的真实使用。

状态机用于编码/解码的PDU。

我不知道设计模式,但研究现有的协议可能是一个很好的起点,已经被标准化特别是“现代”的人。

BitTorrent的是具有大量的扩展一个非常受欢迎的分散协议。

OpenSSH是另一个良好候选者;它支持特征协商,多重加密类型和DE /多路复用信道。

VoIP协议是良好的流应用:RTP和H.323

网络的路由协议是一样好:BGP(和扩展),LDP,VRRP / CARP

我不知道的模式,因为这样的,但有一些“显而易见”的选择点。 首先,你要使用ASN.1或没有(这影响了一大堆)? 其次,你要一个人可读的协议或二进制一个? 第三,你要在你的协议的任何安全方面的问题?

不,回答“想用ASN.1”将德回答迫使相当多的协议设计的问题。

没有经过这种彻底了,但是我想是好DOC:

此外,看起来像一本好书:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top