跨语言通信方案比较

常用的跨语言通信方案:

  • 基于SOAP消息格式的WebService
  • 基于JSON消息格式的RESTful 服务

以上两种方案的弊端:

  • XML体积太大,解析性能极差
  • JSON体积相对较小,解析相对较快,但表达能力较弱

于是探索一下现在比较流行的跨语言通信方案:

Google protobuf

Protocol Buffers是Google公司开发的一种数据描述语言
可用于数据存储、通信协议等方面,它不依赖于语言和平台并且可扩展性极强。
现阶段官方支持C++、JAVA、Python等三种编程语言,但可以找到大量的几乎涵盖所有语言的第三方拓展包。
消息格式定义采用proto文件

应用

  • Google内部

优点

  • 二进制消息,性能好/效率高(空间和时间效率都很不错)
  • proto文件生成目标代码,简单易用
  • 序列化反序列化直接对应程序中的数据类,不需要解析后在进行映射(XML,JSON都是这种方式)
  • 支持向前兼容(新加字段采用默认值)和向后兼容(忽略新加字段),简化升级
  • 支持多种语言(可以把proto文件看做IDL文件)
  • Netty等一些框架集成

缺点

  • 官方只支持C++,JAVA和Python语言绑定
  • 二进制可读性差(貌似提供了Text_Fromat功能)
  • 二进制不具有自描述特性
  • 默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持)
  • 只涉及序列化和反序列化技术,不涉及RPC功能(类似XML或者JSON的解析器)

Apache Thrift

Thrift是Facebook实现的一种高效的、支持多种编程语言的远程服务调用的框架,
现在已经转到Apache组织下,提供数据序列化的功能和RPC服务能力。
支持 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk 等语言
消息格式定义采用thrift文件

应用

优点

  • 支持非常多的语言绑定
  • thrift文件生成目标代码,简单易用
  • 消息定义文件支持注释
  • 数据结构与传输表现的分离,支持多种消息格式
  • 包含完整的客户端/服务端堆栈,可快速实现RPC
  • 支持同步和异步通信

缺点

  • 和protobuf一样不支持动态特性

Apache Avro

Avro出自Hadoop之父Doug Cutting,
目标是推出标准性的云计算的数据交换和存储的Protocol
支持 C, C++, Java, Python, Ruby, PHP
消息格式定义采用JSON描述

应用

优点

  • 二进制消息,性能好/效率高
  • 使用JSON描述模式
  • 模式和数据统一存储,消息自描述,不需要生成stub代码(支持生成IDL)
  • RPC调用在握手阶段交换模式定义
  • 包含完整的客户端/服务端堆栈,可快速实现RPC
  • 支持同步和异步通信
  • 支持动态消息
  • 模式定义允许定义数据的排序(序列化时会遵循这个顺序)
  • 提供了基于Jetty内核的服务基于Netty的服务

缺点

  • 只支持Avro自己的序列化格式
  • 语言绑定不如Thrift丰富
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Chameleon简写CML,中文名卡梅龙;中文意思变色龙,意味着就像变色龙一样能适应不同环境的端整体解决方案。 支持平台:web、微信小程序、支付宝小程序、百度小程序、android(weex)、ios(weex)、qq 小程序、字节跳动小程序、快应用、持续更新中 一端所见即多端所见——多端高度一致,无需关注各端文档。 特点: 多端高度一致 深入到编程语言维度保障一致性,包括框架、生命周期、内置组件、事件通信、路由、界面布局、界面单位、组件作用域、组件通信等高度统一。 丰富的组件 在用 CML 写页面时,chameleon 提供了丰富的组件供开发者使用,内置的有button switch radio checkbox等组件,扩展的有c-picker c-dialog c-loading等等,覆盖了开发工作中常用的组件。 丰富的 API 为了方便开发者的高效开发,chameleon 提供了丰富的 API 库,发布为 npm 包chameleon-api,里面包括了网络请求、数据存储、地理位置、系统信息、动画等方法。 自由定制 API 和组件 基于强大的多态协议,可自由扩展任意 API 和组件,不强依赖框架的更新。各端原始项目中已积累大量组件,也能直接引入到端项目中使用。 基于强大的多态协议,充分隔离各端差异化实现,轻松维护一套代码实现多端。 智能规范校验 代码规范校验,当出现不符合规范要求的代码时,编辑器会展示智能提示,不用挨个调试各端代码,同时命令行启动窗口也会提示代码的错误位置。 渐进式端 既想一套代码运行多端,又不用大刀阔斧的重构项目?不仅可以用 cml 开发页面,也可以将多端重用组件用 cml 开发,直接在原有项目里面调用。 先进前端开发体验 Chameleon 不仅仅是端解决方案。基于优秀的前端打包工具 Webpack,吸收了业内多年来积累的最有用的工程化设计,提供了前端基础开发脚手架命令工具,帮助端开发者从开发、联调、测试、上线等全流程高效的完成业务开发。 业务线收集 使用CML业务线收集。
### 回答1: 平台socket封装是指为了在不同操作系统或者硬件平台上运行的应用程序之间进行网络通信,将socket API进行封装,提供统一的接口来使得应用程序可以方便地进行网络通信。由于在不同操作系统或者硬件平台上,socket API的实现方式有所不同,因此需要对不同平台进行适配和封装。平台socket封装的目的是方便开发人员进行网络通信,同时提高应用程序的可移植性、兼容性和可扩展性。在平台socket封装中,可以使用一些开源的第三方库,比如Boost.Asio、libevent等。这些第三方库提供了一些封装接口,使得应用程序能够使用统一的方式来进行网络编程。 在使用平台socket封装时,需要注意以下几点: 1.不同操作系统之间可能存在差异,需要进行相应的适配和兼容性测试。 2.在进行网络通信时,要保证通信协议的一致性,避免数据传输出现丢包或者粘包等问题。 3.要充分理解每个函数的含义和参数,以保证网络编程的正确性和可靠性。 总之,平台socket封装为应用程序提供了简单、方便、可移植的网络编程方式,是现代网络通信的重要组成部分。 ### 回答2: 平台socket封装是一种将不同操作系统的socket细节进行封装的技术。通过平台socket封装,我们可以让不同操作系统的socket代码在不进行修改的情况下在不同的平台上运行。这样可以加快开发者的开发速度,同时降低代码维护难度。 平台socket封装技术的实现需要解决两个问题:一是不同操作系统对socket函数的实现细节不同,导致代码实现难度大,需要针对每个操作系统单独编写代码;二是平台socket封装技术需要充分考虑移植性问题,需要确保在不同操作系统和硬件平台上稳定运行。 为了解决这些问题,平台socket封装技术通常采用C或C++语言编写,使用平台无关的API,例如POSIX API或者Winsock API。同时,平台socket封装也需要具备平台的编译和构建环境,例如常用的Cmake或者Autotools。 平台socket封装的好处是显而易见的,它不仅可以提高开发者的效率,还可以降低代码维护的难度。但是需要注意的是,平台socket封装并不是万能的,它需要根据实际应用场景进行选择。如果仅仅是针对特定平台开发应用,使用原生的socket API可能更加简单有效。但是在开发平台应用或者框架时,使用平台socket封装技术是非常重要的。 ### 回答3: 平台socket封装是一种将底层的socket通信接口进行封装,使得在不同的操作系统以及开发语言中实现socket通信更加简单和便捷的工具。封装后的平台socket可以隐藏底层操作系统的差异性,以统一的接口供用户使用,提高了代码的可复用性和平台移植性。 平台socket的封装可以通过使用库的方式进行实现,例如常见的Socket.io和Boost.asio库等。这些库提供了高层次的API,使得开发者不再需要关注不同平台和语言下socket通信的实现细节,而是可以直接调用封装好的API进行开发。同时,这些库也提供了众多的工具和函数,能够帮助开发者更加便捷的进行socket通信的开发和调试。 平台socket封装的优点不仅在于提高编程效率,还可以提高系统的灵活性和可扩展性。开发者可以更加方便地进行平台切换和升级,同时还可以通过简单的调用来实现多个设备之间的通信。 总之,平台socket封装的出现大大方便了软件开发工作,能够满足当今多样化、交互性强的移动互联网市场需求,为开发者提供了高效、可靠的网络通信解决方案

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值