`
mryufeng
  • 浏览: 982040 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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边各自生成代码,这样最轻松 而且能表达数据很轻松,推荐使用。












分享到:
评论
4 楼 mryufeng 2010-01-27  
rain2005 写道
由于不是很懂C,俺瞎揣的,一般的port就是pipe描述符,socket就是socket文件描述符,总之port就是和文件对应的一切都是文件。


port就是文件句柄+buffer+一堆erts内部数据结构.
3 楼 rain2005 2010-01-26  
由于不是很懂C,俺瞎揣的,一般的port就是pipe描述符,socket就是socket文件描述符,总之port就是和文件对应的一切都是文件。
2 楼 mryufeng 2009-10-23  
可以呀 json/asn.1/thrift/protol buffer是一个等级的东西。
1 楼 Arbow 2009-10-23  
突然想起,port通信能不能用Thrift/Protocol buffer这些协议?socket通信是可以的

相关推荐

    erlang port driver test

    总的来说,这个项目是为了验证和优化 Erlang 在 Linux 环境下通过 Port Driver 与外部程序交互的能力,测试可能涵盖了端口的创建、数据交换、错误处理和资源管理等多个方面。通过这样的测试,开发者可以确保他们的...

    基于Erlang的即时通讯系统的设计与实现_黄明.caj

    基于Erlang的即时通讯系统的设计与实现

    java php python erlang 千万级内存数据性能比较

    Erlang的字典数据结构通常比其他语言的哈希表更快,因为它优化了并发访问和内存管理。 接下来是Java,它以其跨平台能力和丰富的库而闻名。"java_class_arr_data_test.jar"和"java_string_arr_data_test.jar"可能是...

    Erlang6大数据存储方式总结

    虽然MySQL不是Erlang原生的存储解决方案,但其强大的SQL查询能力和成熟的社区支持使其在处理复杂查询和大规模数据时表现出色。通过Erlang与MySQL的集成,开发者可以利用两者的优点,构建混合型的存储解决方案。 ...

    Erlang和RabbitMQ安装包

    2. **高可用性**:RabbitMQ支持集群和镜像队列,可以创建冗余以提高服务的可用性和数据安全性。 3. **插件体系**:RabbitMQ有丰富的插件系统,可以扩展其功能,例如管理界面、日志记录、监控等。 4. **广泛的语言...

    erlang -c语言程序接口.pdf

    - `_read` 和 `_write` 函数用于读写数据。 - `_read` 的第一个参数表示读取的方向(0表示输入,1表示输出)。 - `_write` 的第一个参数表示写入的方向。 #### 五、Erlang与C程序的交互流程 1. **创建端口** 在...

    erlang otp 19.1 官网文档 HTML格式

    Erlang OTP 19.1 是一个重要的版本更新,主要包含了Erlang编程语言的运行时系统(ERTS)和其他一系列的库和工具。OTP(Open Telecom Platform)是Erlang的核心部分,提供了一个强大的框架来构建高度并发、容错和...

    erlang和rabbitmq.zip

    4. **函数式编程**:Erlang的函数式编程风格强调不可变数据和纯函数,简化了并发编程,减少了副作用。 5. **内置TCP/IP支持**:Erlang提供了丰富的网络库,使得创建网络服务变得简单。 【RabbitMQ】 RabbitMQ是...

    图书:Erlang和OTP实战

    1. Erlang的基础语法:包括模式匹配、递归、过程(process)和数据类型等。 2. OTP的设计原则:理解微服务、状态机和行为(Behaviours)的概念,如Supervisor用于管理进程树,GenServer实现状态管理,以及GenEvent...

    谈谈erlang网络环境下的几种数据流转形式(PPT)

    3. **Port和Driver**:Erlang的Port机制允许与C或其他语言编写的外部程序交互,数据通过Port以二进制流的形式传输,实现与外部世界的通信。 4. **分布式Erlang**:Erlang支持跨节点的进程通信,使得在多个物理或...

    erlang使用post方式发送json数据

    学习erlang的时候尝试编写的小例子,使用post方式发送json数据来进行http请求,希望能帮到大家~

    介绍 Erlang binary 和 bit string 数据类型的经典文章

    通过引入 bit strings 和 binary comprehensions,Erlang 在处理位和字节级别的数据时变得更加高效和灵活。这些新特性不仅简化了代码,还提高了程序的可读性和可维护性。随着 Erlang 社区的不断发展和完善,我们有...

    Erlang官网下载过慢

    标签中提到了“Erlang Rabbit 异步通讯”,这意味着讨论的重点是Erlang如何与RabbitMQ结合实现异步通信。RabbitMQ是一个开源的消息代理,它遵循Advanced Message Queuing Protocol (AMQP)标准,提供了一种可靠、高效...

    erlang编程 Introducing Erlang

    函数式编程强调数据不可变性和函数的数学属性,使代码更易于理解、测试和并行处理。 ### 2. 并发与轻量级进程 Erlang的一大亮点是其内置的并发机制。它使用轻量级进程(Lightweight Processes, LWP)来实现并发,...

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    Erlang B和Erlang C是电信领域中两种重要的流量模型,用于预测和分析通信系统中的呼叫处理能力和拥塞情况。这两个模型由丹麦工程师Agner Krarup Erlang在20世纪初提出,至今仍广泛应用于现代通信网络的设计与优化。 ...

    erlang深度分析.pdf

    理解分布式协议(dist协议)的格式和全局数据结构(如ETS、Dets)的应用,有助于开发健壮的分布式应用。 #### 6. Erlang的BEAM模拟器 BEAM是Erlang的字节码解释器,模拟器可以用于开发阶段模拟运行和测试Erlang代码...

    安装Erlang和RabbitMQ

    安装Erlang和RabbitMQ,linux系统下的哦,有红色字体标注!已踩坑

    一个我自己学习Erlang的聊天室服务器及客户端代码

    2. JSON或XML数据格式:为了与Erlang服务器进行数据交换,客户端可能使用JSON或XML作为数据序列化格式,这两种格式跨语言兼容性好,易于解析和生成。 3. 多线程:Java客户端可能采用多线程技术,一个线程用于接收...

    erlang和RabbitMQ的安装包

    Erlang和RabbitMQ是两个在分布式系统和消息队列领域中至关重要的技术。Erlang是一种函数式编程语言,以其并发性、容错性和热代码升级能力而闻名,而RabbitMQ则是一个基于Erlang开发的消息中间件,广泛应用在微服务...

    erlang资源

    1. **Erlang语法**:涵盖基本的变量、数据类型(如原子、列表、元组和二进制)、控制结构(如case表达式和if语句)以及函数定义。 2. **函数式编程概念**:Erlang是纯函数式语言,书中可能会介绍函数式编程的基本...

Global site tag (gtag.js) - Google Analytics