CERL2 系列6:SDL,面向数据流的网络协议

原创 2010年01月20日 01:37:00

在《CERL2 系列5:SDL与我对网络协议的思考》一文中,尽管我对 SDL 的来龙去脉做了介绍,但是我发现还是遗漏了非常重要的内容。朋友们可能会问,SDL看起来不就是一个普通的IDL(接口描述语言)吗,为什么不直接沿用一个现成的标准呢?

 

很多时候,看似相似的东西却会是貌似神不是。正是因为我觉得IDL并不符合我对网络接口协议的观点,所以才有了 SDL。

 

首先,多数 IDL 都是面向对象的。但是我认为网络协议应该是面向数据流的。为什么在网络协议中,面向对象是坏的呢?

 

原因很简单。面向对象的网络协议必然增加实现的复杂性。由于我们可以在网络流中传递对象,那么自然而然,对象就需要在服务端存在存根(Stub),在客户端存在代理(Proxy)。而特别让人讨厌的,是对象生命周期的管理。这些都给服务端、客户端带来实现难度。如果说加大服务端的复杂度影响不算太大的话,客户端的难度增加,无疑使得协议的跨语言调用变得更加困难。

 

面向数据流的网络协议很直观,消除了一切面向对象带来的负累。我们对在网络中传递的数据有着非常清晰的概念。在简单对协议细节进行了解后,你可以在没有任何基础的情形下,很快做出一个新的语言的客户端调用代码。

 

简单是美。这是面向数据流的网络协议的魅力所在。

 

体现 SDL 简单的另一个层面,是 SDL 的接口描述方式。对于这样一个声明:

 

   [id=2] get(String key) -> {ok, String val} | false;

 

你可以看到, -> 符号之前的是 request 包,-> 之后的是 response 包。这非常直观。你可以对比下这样的一个声明:

 

    [id=2] bool get([in] String key, [out] String* val);

 

两者的阅读体验不是在同一个档次上的。

 

特别是,在 response 的分支情况很多的时候,第二种描述方式就会惨不忍睹。

 

所以,从各种角度讲,SDL 是我认为描述网络协议的接口最佳选择。

 

 

面向数据流的设计

在面向数据流的设计方法中,一般把数据流图中的数据流划分为两种类型,一种是变换流,一种是事务流。信息沿着输入通路进入系统,同时将信息的外部形式转换成内部表示,然后通过变换中心处理,再沿着输出通路转换成外...
  • boy_love_sky
  • boy_love_sky
  • 2017年03月13日 16:25
  • 341

面向数据流的设计方法

面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。 在软件工程的需求分析阶段,信息流是一个关键考虑。通常用数据流图描绘信息在系统中加工和流动的 情况。面向数据流的设计方法定义了一些不...
  • qq_15037231
  • qq_15037231
  • 2017年03月06日 20:15
  • 1826

软件工程学习日记(4)----面向数据流的设计方法

用面向数据流的方法设计下列系统的软件结构 问题回顾: 为方便储户, 某银行拟开发计算机储蓄系统. 储户填写的存款单或取款单由业务员输入系统, 如果是存款, 系统记录存款人姓名、住址、存款类型...
  • u013836582
  • u013836582
  • 2015年11月16日 23:38
  • 849

CERL2 系列5:SDL与我对网络协议的思考

网络编程中,网络协议是最最关键的角色。这就像我在客户端编程的时候,最关心模块接口一样。网络协议是客户端(B或C)与服务端(S)之间的交互接口。 我关注网络协议的时候,和很多人关注的面是不同的。不少人问...
  • xushiweizh
  • xushiweizh
  • 2010年01月18日 23:50
  • 6267

面向数据流的分析方法VS面向数据结构的分析方法

  • m13666368773
  • m13666368773
  • 2012年06月05日 14:30
  • 1320

面向数据流的方法设计系统的软件结构(储蓄系统)

RT: 事务流
  • bestMing_
  • bestMing_
  • 2015年11月22日 11:23
  • 2011

3、用面向数据流的方法设计下列系统的软件结构

(1)储蓄系统(参见习题二第二题) a:利率 b:存款金额 c:取款金额 d:密码 e:单存款 f:单取款 g:存款 h:存单 i:利息 j:利息清单...
  • u012758367
  • u012758367
  • 2015年11月16日 18:59
  • 2399

SDL系列讲解(一) 简介

什么是 SDLSimple DirectMedia Layer(SDL)是一个跨平台开发库,主要提供对音频,键盘,鼠标,操纵杆的操作,通过OpenGL和Direct3D来实现直接访问图像硬件。 主要应...
  • a332324956
  • a332324956
  • 2017年10月12日 19:46
  • 207

网络协议的特征

1.面向消息的协议与面向流的协议 (1).面向消息的协议。面向消息的协议以消息为单位在网上传数据,消息在发送端一条一条地发送,在发送端也只能一条一条地接收,每一条消息是独立的,消息之间存在着边界。例如...
  • wangmingliang1990
  • wangmingliang1990
  • 2015年05月10日 21:29
  • 525

面向初学者的 MQL4 语言系列之2——MQL4语言入门深入

简介 这是“MQL4 语言入门”系列的第二篇文章。第一篇文章“MQL4 语言入门简介”描述了 MQL4 的功能,我们学习编写简单脚本,了解变量含义,学习使用变量,分析函数、数组、内置数组和变量、...
  • woshiwangbiao
  • woshiwangbiao
  • 2016年09月29日 09:52
  • 2279
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CERL2 系列6:SDL,面向数据流的网络协议
举报原因:
原因补充:

(最多只允许输入30个字)