对文本协议的案例

2021-06-17 14:12:36

人机交互与计算机计算机交互非常不同。对于与计算机进行通信的人,在文本shell或使用点击模型的图形用户界面上的英语命令很大。但是,一旦结束,当两个或更多计算机必须交互时,文本协议可能并不是所有有帮助的。然而,基于文本的计算机到计算机协议非常常见,并且甚至在它的地方常见的地方似乎普遍无处不在。

以下是您' ll在互联网上浏览基于文本的协议的一些摇摇欲坠的论点。

要清楚,历史上计算机的比特宽度不同于供应商和模型之间每一个字节的1到48位。甚至文本本身在BCD,IBM,ISO和100S的不同计算机上被不同地编码。如果您有任何最新的Linux或BSD计算机,请键入iconv -l以列出一些流行的文本编码格式。 ASCII和UTF-8/16 / 32最终仅在80年代末期和90年代初期固定了编码问题。文本永远不会像&#39所说的那样便携。

它只在90年代初的某个地方ISO / IEC 2382-1:1993提出了2的力量,用于测量数据宽度 - 将字节固定为8位。现在几乎几乎所有的CPU都代表了两个' s补充的数字,使二进制消息更简单的文本格式。

当然,它'不喜欢你将在手机上打开一个终端,然后在这样的SIP中键入,以便打电话给您的朋友。

邀请SIP:[email protected]:2780;运输= UDP SIP / 2.0VIA:SIP / 2.0 / UDP 10.0.1.12:5060;< sip:[email protected]> ;;标记= a1b2c3d4e5to:&# 34; 1001"< sip:[email protected]>标签= z1y2x3w4v5 contact:< sip:[email protected]>呼叫ID:owywztg2ndrkotzjyjc4nuzyte1zgy5zgy3zgvkmmq.cseq:102 InviteUser-Agent:Asterisk PBXMax-Forwards :70Allow:邀请,ACK,取消,选项,再见,参考,订阅,通知,Infosupported:换乘文字类型:应用程序/ sdpContent-length:210.v = 0o = root 6668 6669在IP4 10.0.0.2s = sessionc =中IP4 10.0.0.2T = 0 0M =音频5004 RTP / AVP 8 101A = RTPMAP:8 PCMA / 8000A = RTPMAP:101电话 - 事件/ 8000A = FMTP:101 0-16A = PTime:20a = sendrecv

这些天,人们甚至拨打了实际数字。它通常是在联系人中搜索的名称,然后是"拨号"按钮。围绕这的任何论点通常都来自它的想法和#39; s' s易于打开套接字并键入命令。它可能是FTP或Telnet的真实,但与HTTP或任何现代文本的协议都不是如此。

如果没有视觉is(甚至是基本的一个),上述消息和随后的控制平面通信不容易调试。确保您可以在终端上查看此终端或在您喜欢的文本编辑器中编辑此内容,但下一步是什么?您将如何将其送入呼叫控制器机器,而在状态机库中没有广泛的调试开口?

struct ntp_ts {uint32_t秒; UINT32_T FRAC;}; struct ntp_packet {unsigned int li:2; / * LEAP指示灯* / unsigned int VN:3; / *协议的版本号* / unsigned int模式:3; / *客户端或服务器* / uint8_t stratum; / *本地时钟的地层水平* / UINT8_T民意调查; / *连续消息之间的最大间隔* / uint8_t精度; / *本地时钟* / uint32_t root_delay的精度; / *总往返延迟时间* / uint32_t root_dispersion; / *主时钟源允许的最大误差* / uint32_t ref_id; / *参考时钟标识符* / struct ntp_ts ref_ts; / *参考时间戳* / struct ntp_ts org_ts; / *来源时间戳* / struct ntp_ts rx_ts; / *收到的时间戳秒* / struct ntp_ts tx_ts; / *客户的重要领域:传输时间戳* /} __Attribute __((包装));

它与在线上转储结构NTP_Packet一样简单,并将其读取它 - 没有解析涉及的解析,除了除LI,VN和Mode之外的所有字段上调用ntohx()/ htonx()。但是使用SIP / HTTP,一种简单的线,如内容长度:300将需要一个很好的字符串解析,操作等。

你认为JSON / XML看起来更好吗?如果要编写解析器,请使用DOM或Stream Parser解析NTP,它赢得了' t是显而易见的只是通过查看源代码解析的内容。现在当然,您可以在顶部添加一些额外的图层,其中有一些类型的样式表或Meta XML,在构建过程中解析,为您提供了一个带有多个GET / SET功能的类NTPPacket,也可以是可爱的序列化函数或者也许是一个课程也是如此。解析现在不再是O(1)问题,而是一个复杂的O(WTF)问题,具有同样复杂的内存使用情况。但是因为在某些方程式中可以以某种方式表达,人们将有卡通灯泡时刻,得出结论,即所述解析算法是线性可扩展的。由于硬件也很便宜,它更容易添加更多硬件来处理更多消息,所以它' SA问题的客户侧经济学和#39;没有什么可担心的代码可读性和长期可维护性。任何尝试再次使用结构将被落后思考或在过早优化时进行徒劳的尝试。

当人们谈论可扩展性时,他们通常会期望随意添加或删除字段。可能,他们从未听说过标签长度 - 价值技术或现代CBOR。我的意思是,你可以添加一个新的内容类型:应用程序/ batmobile,但如果另一端没有识别值甚至整个字段,它无论如何都是非常有用的。

从失败的令牌中恢复了多少HTTP / XML / JSON解析器并读取剩余内容?数据总体如何有用?最流行的解析器通常在第一个错误上失败并报告。构建的协议通常会发送错误消息。所以那里的错误恢复并不多。围绕此争论通常表明,某种文本协议是有弹性的,并且整个消息不会破坏。对于syslog vs journalctl而言,此参数实际上是真的,但在通信协议中没有太多。

这并不是说文本协议是错误的;他们有一个地方。它们在无法直接抵消存储器块的编程语言中非常有用,而不使用unholy臃肿的apis。但在主要是机器到机器的电信系统中使用它们只是矫枉过正。硬件当天越来越便宜,并添加更多内存和更多CPU来完成任务将是经济的。然而,二进制协议是空间和时间效率。它们在解析/建筑物中具有较少的开销,并且稍微更容易维护。