我逐渐意识到,我过去问过的几个问题,比如this,实际上可以归结为一个更基本的问题。
是否有任何众所周知的设计模式用于网络通信,并根据其性质,协议构造/解析?谷歌搜索并没有透露太多信息。
请注意,我不是在寻找任何给定问题的解决方案,我是在寻找处理网络通信及其协议的文档化设计模式。
编辑:
请不要提出各种实现细节或讨论特定的协议,除非它与设计模式相关联。协议设计不是问题,我寻找的是用于创建或解析协议的设计模式,更不用说通信模式本身了。
EDIT2:
我发现很难相信没有人想出任何通用的网络通信模式。是的,我知道“视情况而定”,但你可以对任何项目这么说,然而有很多模式涵盖了一般的想法。
发布于 2009-03-26 12:25:09
这是一个相当广泛的问题,它的处理可能需要一本相当厚的书。
我自己不知道任何这样的资源,但让我们仔细考虑一下,并考虑一下网络通信模式空间的维度:
连接方式:{基于连接,无连接}
交互方式:{同步,异步}
会话复杂度:{命令-响应,对话}
消息格式:{ freeform-stream,semi-structured,fully structured} ..?
一个不错的起点是将TCP/IP协议族映射到上面的空间,并查看在上面的协议特征模式空间中占据独特位置的一个或多个样本的实现。你最喜欢的*nix操作系统的源代码将是一个很好的地方。
解析器实现可能分为两大类:{命令交换处理,有限状态机}。
前者(显然)是两者中较简单的一个,并且可能是最初的实现(除非您以前做过这种事情)。
后者(可能)更健壮,更有效(就loc而言),并允许采用对协议的更改(如果它仍然受到设计更改的影响)。
(底层(虚拟) OS网络设施(当然)也会对实现产生很大影响。以JVM为例:基于NIO选择的通道处理可以很好地与FSM配合使用。)
希望这能有所帮助。
发布于 2009-03-22 11:57:25
我建议:抽象出网络协议。
首先确定它们之间的功能、模块和API。然后确定数据将通过网络传输的协议。
然后仔细地将所有网络问题封装在它们自己的层中,以便您以后可以应用加密、压缩、添加http传输(以通过防火墙)或任何您稍后想要添加的功能正交的方式。
发布于 2012-09-09 17:44:40
接受器/连接器模式:http://www.cs.wustl.edu/~schmidt/PDF/Acceptor.pdf
过滤器链基于Gof响应链,它被用于许多网络堆栈/框架中。
用于编码/解码PDU的状态机。
https://stackoverflow.com/questions/670808
复制相似问题