erlang和port通讯的数据格式

erlang内置的port非常强大,是erlang通往外面世界的通道,所以port和erlang程序的通讯的数据格式影响了通讯的效率,和稳定性。 我们在选择格式的时候, 会优先考虑到erlang的特性和port程序编写语言的特点,选出一种2者都容易处理的格式。

通讯通常有2种,基于行的文本和2进制格式。

行通讯最容易,因为是文本,调试起来就很方便。 形如这样的格式:
request args\n erlang编码这种格式就是加个\n, 解码可以用driver的{line, xxx}选项。而外部程序比如说c 解码可以用fgets, 编码也是加个\n. 缺点是: 表达上比较受限 不好表示结构数据。

2进制格式,形如这样的格式:
4个字节包长度 包体 . erlang和解码都可以利用driver的{packet,4} 自动把包体接处理。而外部程序比如说c 处理这样的也非常轻松。

包体有以下几种留下的格式:
1. 自定义格式。 比如: 4个字节cmd + 2个字节字符长度 + 字符
只要erlang和外部程序都能同样这种格式就好。erlang有很强大的binary处理这种事情很轻松, c同样也是。 缺点是太繁琐,格式变化的时候 容易漏掉东西。

2. erlang的外部协议格式。 erlang编码可以用term_to_binary, 解码用binray_to_term. c程序用ei库俩编解码。 这样erlang端的工作量就很小, c端的麻烦些。

3. json这样的格式。 erlang和c都用现成的json库来编码解码。

4. asn.1格式。erlang有强大的内置的asn编码解码。c端也有asn1c这样的编解码器。 写个asn1规格 2边各自生成代码,这样最轻松 而且能表达数据很轻松,推荐使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值