浏览 2287 次
锁定老帖子 主题:erlang和port通讯的数据格式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-22
最后修改:2009-10-22
通讯通常有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边各自生成代码,这样最轻松 而且能表达数据很轻松,推荐使用。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-10-23
突然想起,port通信能不能用Thrift/Protocol buffer这些协议?socket通信是可以的
|
|
返回顶楼 | |
发表时间:2009-10-23
可以呀 json/asn.1/thrift/protol buffer是一个等级的东西。
|
|
返回顶楼 | |
发表时间:2010-01-26
由于不是很懂C,俺瞎揣的,一般的port就是pipe描述符,socket就是socket文件描述符,总之port就是和文件对应的一切都是文件。
|
|
返回顶楼 | |
发表时间:2010-01-27
rain2005 写道 由于不是很懂C,俺瞎揣的,一般的port就是pipe描述符,socket就是socket文件描述符,总之port就是和文件对应的一切都是文件。 port就是文件句柄+buffer+一堆erts内部数据结构. |
|
返回顶楼 | |