我已经意识到我过去曾问过几个问题,比如这个问题真的归结为一个更基本的问题.
是否有任何众所周知的网络通信设计模式,以及它的性质,协议构造/解析?谷歌搜索没有透露太多.
请注意,我不是在寻找任何给定问题的解决方案,我正在寻找处理网络通信及其协议的文档化设计模式.
编辑:
请不要提出各种实现细节或讨论特定协议,除非它与设计模式相关联.协议设计不是问题,它是用于创建或解析我正在寻找的协议的设计模式,更不用说通信模式本身了.
EDIT2:
我发现很难相信没有人提出任何常见的网络通信模式.是的,我知道"这取决于",但你可以说任何项目,但有很多模式涵盖一般的想法.
这是一个相当广泛的问题,它的处理可能需要一本相当密集的书.
我自己不知道任何这样的资源,但让我们考虑一下并考虑网络通信模式空间的维度:
连接模式:{基于连接,无连接}
交互方式:{同步,异步}
会话复杂性:{command-response,dialog}
消息形式:{freeform-stream,半结构化块,完全结构化的块} ..?
一个好的起点是采用TCP/IP协议族,将它们映射到上述空间,并查看在上述协议特征模式中占据独特位置的一个或多个样本的实现.空间.你最喜欢的*nix os的源代码是个好看的地方.
解析器实现可能分为两大类:{命令交换处理,有限状态机}.
前者(显然)是两者中较简单的,可能是初始实现(除非你以前做过这类事).
后者(可能)更健壮,更有效(就loc而言),并且允许对协议进行更改(如果它仍然受到设计变更的影响).
(基础(虚拟)OS网络设施(当然)也会极大地影响实现.例如,以JVM为例:基于NIO选择的通道处理可以很好地与FSM配合使用.)
希望有所帮助.
我会说,责任链模式可以用于从/向网络发送/接收数据.
您构建了一系列命令以从客户端发送到服务器.每个命令都通过责任链进行处理,并添加数据以正确处理命令.
在数据发送时,链可能看起来像那样
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