最近一段时间开发客户端app的感悟

简介:

 关于android和cocos2d

  凭着对大学时候写html+css的一点点的记忆,我还是认为android的布局xml文件还是参考了html+css,只是他更加臃肿!就想 android平台本身那样,当然这也无可厚非,因为他要兼容很多东西,试想有一天android只有几款机型的时候,也许在布局上也就不会这样设计了! (ps:想起来微博上一个博友抱怨,写了一个简单的管理客户端,布局文件居然达到了1w行,要知道有效代码才8k行!)

  在刚开始写android的时候,最担心的就是分辨率的问题了,可是后来却没有发生过这种情况。因为几乎在产生差异的地方我都是使用的相对布局,比如weight或者relativeLayout等等。用这些特性抹掉不同机型造成的差异!

  现在转过头来写cocos2d,简直不能理解为什么要这样设计!觉得还是相对布局的好!可是熟悉了cocos2d的缩放和描点才知道,cocos2d的这样设计的妙处!看似绝对其实是相对的!首先声明下,我没有使用cocos2d提供的布局工具,而是自己手写布局!基本上是从下向 上,再从左到右,这样一个控件挨着一个控件,他的坐标他的位置都很好控制!这似乎也是一种相对的模式!

  关于http和tcp协议!

  在写一个扑克类游戏的时候,客户端选择了跨平台的cocos2d!首先没有选择unity3d是因为不想再写C#去了(大学的时候有写过),也不想写js(实在无法忍受js的语法)!再者大学毕业头几年其实一直在写C++,这几年一直写java后端和php服务器,对C++都有些生疏了,还有一些底层的socket api,在写这个cocos2d的客户端的时候,又从新找回了之前熟悉的网络编程,而且是跨平台的,话说之前写服务器一般也只是用在linux上!cocos2d的客户端因为要跑在ios上,android上,还有跑在win32上(调试的时候),所以需要一个跨平台的网络库!当然如果怕麻烦的话,可以只用socket相关的,而不介入的select模型,不过我还是引入了!为了处理的方便,我把select函数放在了每一个layer的update中!而不是单独新建一个新的线程,这样避免了同步上的问题!

  我们知道http是基于tcp协议的!做了封装,所以原理很简单;可是简单的原理缺造成了逻辑设计上的困难!因为在tcp中可以服务器主动推送的消息,全部需要客户端来定时主动拉取!客户端定时的时间还不能太长(这样会造成卡顿),也不能太短(造成客户端的卡顿和带宽的损耗)!我们之前的设计是定时器的时间为0.7秒!哎,还奇葩的数字!可能很多同学会说,http也可以做长连接!可是大家有没有想过,如果手机连的是wifi还好,支持长连接;但是如果手机连的是移动网络,那么移动会有一个http的代理!即使你的客户端和服务器都支持http长连接,代理不支持,也是没有办法!

  还有就是,为了节省带宽和避免卡顿,在使用http连接的时候,常常很多消息封装在一次http交互中!体现在代码中就是混淆了逻辑,而使用tcp协议就能很好的避免这个问题,没有卡顿!打一个比方:一个玩家跟注!服务器处理的时候,首先要处理这个玩家状态的更新,再处理轮到下一个玩家! 如果是tcp协议,那么很简单,玩家状态更新一个消息,轮到下一个玩家一条消息;但是如果是http协议就不一样了!客户端主动拉取消息,如果间隔1秒拉取一次,那么两个操作就间隔了一秒,在客户端体验看来就是很差了!除非将这两个操作放在一起,消息也放在一起;但是这样就破坏了函数单一性的职责!

  希望对大家有帮助!

相关文章
|
1月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
88 3
|
1月前
|
Android开发 开发者 UED
个人开发 App 成功上架手机应用市场的关键步骤
个人开发 App 成功上架手机应用市场的关键步骤
|
1月前
|
开发工具 数据安全/隐私保护 Android开发
【教程】APP 开发后如何上架?
【教程】APP 开发后如何上架?
|
1月前
|
API
uni-app 146朋友圈列表api开发
uni-app 146朋友圈列表api开发
18 0
|
1月前
|
Java Android开发 开发者
【Uniapp开发】APP的真机调试指南,从开发到上架全过程
【Uniapp开发】APP的真机调试指南,从开发到上架全过程
36 3
游戏直播APP平台开发多少钱成本:定制与成品源码差距这么大
开发一款游戏直播APP平台所需的费用是多少?对于计划投身这一领域的投资者来说,首要关心的问题之一就是。本文将探讨两种主要的开发模式——定制开发与成品源码二次开发的成本差异及其优劣势。
|
1月前
|
开发框架 移动开发 JavaScript
SpringCloud微服务实战——搭建企业级开发框架(四十六):【移动开发】整合uni-app搭建移动端快速开发框架-环境搭建
正如优秀的软件设计一样,uni-app把一些移动端常用的功能做成了独立的服务或者插件,我们在使用的时候只需要选择使用即可。但是在使用这些服务或者插件时一定要区分其提供的各种服务和插件的使用场景,例如其提供的【uni-starter快速开发项目模版】几乎集成了移动端所需的所有基础功能,使用非常方便,但是其许可协议只允许对接其uniCloud的JS开发服务端,不允许对接自己的php、java等其他后台系统。
145 2
|
1月前
|
移动开发 负载均衡 小程序
代驾app开发丨代驾系统开发玩法详情丨代驾系统开发网页版/H5/小程序及源码部署
**司机/代驾员端**:司机可以通过APP接收订单,查看订单详情、路线和导航,提供现场服务并进行确认。
|
1月前
|
人工智能 算法 数据处理
App Inventor 2 Personal Image Classifier (PIC) 拓展:自行训练AI图像识别模型,开发图像识别分类App
这里仅仅介绍一下AI图像识别App的实现原理,AI的基础技术细节不在本文讨论范围。通过拓展即可开发出一款完全自行训练AI模型,用于特定识别场景的App了。
42 1
|
1月前
|
API
uni-app 147我的朋友圈列表api开发
uni-app 147我的朋友圈列表api开发
14 0