7.app跟app后端的通讯

7.app和app后端的通讯
        经常有开发者问:app和后端通讯是用http协议还是私有的协议?是用长连接还是短连接?通过阅读本文,帮你解除上面的疑问。


  (1)是用http协议还是私有的协议?



  在间谍电视剧中,经常能看到间谍们的书信都是用暗号的,就算书信被敌人截取了不怕,需要耗费一定的时间,敌人才能解开书信中的秘密。


  在电影<阿凡达>, 为提升故事真实性,詹姆斯卡梅隆甚至找到语言学家,专为纳美人创造了一种自己的语言。我们看这部电影的时候,根本听不懂潘多拉星球上的纳美外星人到底说什么?纳美语共有大约1000个单词,全球能够掌握其语法的人只有创造这门语言的PaulFrommer教授一人,而且就算他本人也仍然在学习如何更流畅的说纳美语。


  如果间谍们使用的都是大家都懂的中文,敌人截取到书信,就能立刻知道里面的内容。


  如果潘多拉星球上的纳美外星人说的是中文,那么很多人一听就知道他们是说啥。


  同样的,app和后端的通讯,可以分为用通用的语言通讯,还是用暗语通讯两种方式。


  通用的语言有很多种,例如英语和中文,在网络的通讯中,通用的协议有很多,其中http是被最广泛使用的。如果是私有的协议,那就只能自己设计了。


  用http是最方便的,如果是私有协议,包含协议的封装和拆解,工作量大,前端程序员和后端程序员都要增加很多额外的工作量。而且私有协议对程序员的要求高,不适合从web网站转过来的开发者。除非是手游,不然用http就好了。


  (2)app和服务器通讯使用长连接还是短连接?



  假设现在通过手机拨打另外一个人的手机,手机通话费用非常便宜(甚至可以忽略),但是有两个注意的地方:


  1.一台手机同一时间只能接听一个电话。


  2.一台手机接听电话前非常麻烦,要拨号啦,要等接听,这需要一段时间。


  app和服务器通讯使用长连接还是短连接这个问题,可以等同于上面电话模型,是一直保持着通话,还是有需要时才拨号通话这个问题?


  当app和服务器通讯使用长连接,就相当于一直保持着通话,服务器能保持的通讯数量有限,如果通讯满了,那其他app就不能和服务端通讯了。这种通讯方式,多数是使用socket或websocket连接长时间连接,对程序员的要求比较高,开发比较困难,除了手游和聊天推送服务外,不建议使用。


  当app和服务器通讯使用短连接,就相当于需要时才拨号通话。这种通讯方式,配合http协议,是现在主流的通讯方式,开发效率高,有大量的第三方资源,使用非常广泛,推荐使用这种方式。


  (3)app和后端是怎么通讯的?



  相信大家都用过银行的柜员机(ATM)的查询余额,转帐,取款等操作。


  当在柜员机取款的时候,我们输入要取款的金额,隔一会钱就出来了,如果因为有什么问题不能取款(例如超过取款金额的限制),屏幕上也会显示出错误的信息。


  在整个过程中,我们只要输入金额,获得结果(取款成功或不成功),就行了,至于柜员机内部是怎么处理,我们不需要理会。


  柜员机这种把内部的处理遮蔽的做法极大方便了我们的使用。


  同样的,在后端,也只提供了一系列的功能给app使用,这系列的功能以api的形式提供。


  api的定义:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。


  当app调用api的时候,只需要明确下面3点:


  1.这个api是干啥的(柜员机例子中,是取款功能,还是查询余额,还是转账)


  2.知道要输入什么(柜员机例子中,取款要输入金钱)


  3.知道结果是什么(柜员机例子中,取款是成功还是失败)


  至于api内部是怎么处理的,app根本无需理会。


  api,一般是以http的形式调用的,通过http传入参数,返回结果。其中,结果一般是以json格式返回的,因为json格式被众多计算机语言支持,而且省流量。


---------------------------------------------------------------------------------------------------------------------------

打开链接  app后端系列文章总目录 总目录 ,能查看本人发表过的所有原创“app后端”文章。


【作者】曾健生

【QQ】190678908
【qq群】254659220 
【微信公众号】 appbackend
【新浪微博】 @newjueqi
【博客】http://blog.csdn.net/newjueqi