移动App通讯协议及序列化方式的选择

简单列一下不同协议,序列化方式等的考虑。

http还是私有协议?

http协议优/缺点:

在服务器端只需要提供一份接口,浏览器和app共用。在app中嵌入web view也很容易。

http协议的相关工具非常多。开发人员很方便 。比如负载均衡,直接nginx搞定。

比如统计一个接口的调用次数,相当的方便,有现在的分析工具。

压力测试也很方便。

http协议可能http服务器有漏洞,但是这种漏洞真的是很少。

手机可以设置http proxy,这对于某些用户可能是很关键的。如果是私有协议,设置http proxy就无效了。

私有协议优/缺点:

比较复杂,可以自己做一层加密。

逆向有成本,攻击者可能会放弃。

不同语言,每个平台都要开发一套,耗时耗人力。

自己实现的协议有可能有漏洞,要防范恶意攻击。

节省流量。

wmwap下可能要http tunnel。

序列化方式选择,JSON或者protobuf等?

JSON:

通用的数据交换格式,开发人员很熟悉,很三方的工具类库很多。

数据体积比较大。

没有版本化,前后端需要一定的沟通成本。

xml:

体积大,在http服务里,属于被抛弃的格式。

protobuf/thrift:

版本升级很容易,基本没有负担。

体积小。

通迅协议没有官方标准,第三方实现可能比较混乱。

如果是用工具生成的代码,基本不会有序列化的漏洞。

据说微信用的是protobuf。

其它的的序列化方式,或者自己定制的序列化方式:

可能遇到序列化的bug;

多语言支持的问题;

序列化的漏洞问题;

如何应对cmwap?

貌似cmwap的用户还是不少的。

http://s.weibo.com/weibo/cmwap

微信貌似是支持cmwap的:

http://weixin.qq.com/cgi-bin/readtemplate?promote=2&nav=contact&t=weixin_faq_networkflow

http://www.zhihu.com/question/19796744   一个11年的cmwap和cmnet的用户比例的东东。

如果是自己定制的协议,可以要做一下http tunnel,即一开始时,发送一个http头来欺骗移动的网关。

TODO:网上有一些cmwap http tunnel的文章,从理论上应该是可行的。

http还是https?

安全性的考虑:

https比http要安全。

对于app,很大的一个安全威胁是伪造wifi热点,http很容易被抓包。

尽管OpenSSL漏洞让人们意识到https也不是那么的安全。但对于绝大部分人来说,https还是很安全的,因为攻击成功很高。

但是即使https也不是那么的安全,参考:流量劫持能有多大危害?

https要比http慢;

证书的费用;

部署的问题,证书要放到CDN上,不然拿不到用户的真实IP;

看到过一个数据,在中国有20%的地区的无线用户用https是连不上的(真实性,技术性未知)。

全站https还是部分https?

https开发比http要复杂;

总结:

人个认为,对于绝大部分的app,http协议+JSON格式是比较好的选择。

因为这是最容易维护开发的,成本也比较低。

移动App通讯协议及序列化方式的选择

时间: 2024-07-29 08:45:45

移动App通讯协议及序列化方式的选择的相关文章

基于dubbo框架下的RPC通讯协议性能测试

一.前言 Dubbo RPC服务框架支持丰富的传输协议.序列化方式等通讯相关的配置和扩展.dubbo执行一次RPC请求的过程大致如下:消费者(Consumer)向注册中心(Registry)执行RPC请求,注册中心分配服务URL并路由到具体服务提供方(Provider),消费者和服务提供方建立网络连接,服务提供方在本地创建连接池对象并提供远程服务,对于长连接类型协议(如dubbo协议)将保持连接,减少握手认证,调用过程中可以避免频繁建立和断开连接导致的性能开销,保持长连接需要有心跳包的发送,所以

基于dubbo框架下的RPC通讯协议性能测试 转

一.前言 Dubbo RPC服务框架支持丰富的传输协议.序列化方式等通讯相关的配置和扩展.dubbo执行一次RPC请求的过程大致如下:消费者(Consumer)向注册中心(Registry)执行RPC请求,注册中心分配服务URL并路由到具体服务提供方(Provider),消费者和服务提供方建立网络连接,服务提供方在本地创建连接池对象并提供远程服务,对于长连接类型协议(如dubbo协议)将保持连接,减少握手认证,调用过程中可以避免频繁建立和断开连接导致的性能开销,保持长连接需要有心跳包的发送,所以

通讯协议序列化解读(二) protostuff详解教程

上一篇文章 通讯协议序列化解读(一):http://www.cnblogs.com/tohxyblog/p/8974641.html  前言:上一面文章我们介绍了java序列化,以及谷歌protobuf,但是由于protobuf的使用起来并不像其他序列化那么简单(首先要写.proto文件,然后编译.proto文件,生成对应的.java文件),所以即使他是如何的优秀,也还是没能抢占json的份额.这篇文章我们要介绍的是一款基于protobuf的java序列化协议--prorostuff,在java

Websocket全讲解。跨平台的通讯协议 !!基于websocket的高并发即时通讯服务器开发。

本博文,保证不用装B的话语和太多专业的语言,保证简单易懂,只要懂JAVAEE开发的人都可以看懂. 本博文发表目的是,目前网上针对Websocket的资料太散乱,导致初学者的知识体系零零散散,学习困难加大.本博加以整理,并且实践. 所用核心技术选型: Tomcat + Spring 4.0.3 + Mongodb(高并发数据库) + SpringQueue(消息队列)+ ActiveMQ (消息队列) + Spring-data-Mongo + Servlet 3.0 +Spring-Websoc

几种Java序列化方式的实现

0.前言 本文主要对几种常见Java序列化方式进行实现.包括Java原生以流的方法进行的序列化.Json序列化.FastJson序列化.Protobuff序列化. 1.Java原生序列化 Java原生序列化方法即通过Java原生流(InputStream和OutputStream之间的转化)的方式进行转化.需要注意的是JavaBean实体类必须实现Serializable接口,否则无法序列化.Java原生序列化代码示例如下所示: package serialize; import java.io

Soap、Http、TCP/IP 三个基本的通讯协议有什么区别?

TCP TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯.TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性.TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度.如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层.TCP将包排序并进行错误检查,同时实现虚电路间的连接.TCP数据包中包括序号和确认,所以未按照顺序收到

几种通讯协议的比较

几种通讯协议的比较 一.综述 本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能. RMI是java语言本身提供的远程通讯协议,稳定高效,是EJB的基础.但它只能用于JAVA程序之间的通讯. Hessian和Burlap是caucho公司提供的开源协议,基于HTTP传输,服务端不用开防火墙端口.协议的规范公开,可以用于任意语言. Httpinvoker是SpringFramework提供的远程通讯

物联网常见通信协议与通讯协议梳理【上】- 通讯协议

先说明, 这是在微信公众号看到的,不是自己所写, 觉得别人总结的很好, 就拿过来了.对于学习, 做一个搬运工也不可耻了,将好的知识自己吸收.  在微信公众号里, 没有找到连接. 1  "通信"与"通讯"傻傻分得清 传统意义上的"通讯"主要指电话.电报.电传.通讯的"讯"指消息(Message),媒体讯息通过通讯网络从一端传递到另外一端.媒体讯息的内容主要是话音.文字.图片和视频图像.其网络的构成主要由电子设备系统和无线电系统构

信息安全系统设计基础实验五:通讯协议设计

北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:52.53 姓名:王思亓 赵阳林 学号:20135205 20135334 成绩: 指导教师:娄嘉鹏 实验日期:2015.11.24 实验密级: 预习程度: 实验时间:15:30—18:00 仪器组次: 必修/选修:必修 实验序号: 实验名称:通讯协议设计 实验目的与要求:1.掌握在ARM开发板实现一个简单的WEB服务器的过程.2.学习在ARM开发板上的SOCKET网络编程.3.学习Linux下的signal()函