最近一段时间开发客户端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秒拉取一次,那么两个操作就间隔了一秒,在客户端体验看来就是很差了!除非将这两个操作放在一起,消息也放在一起;但是这样就破坏了函数单一性的职责!
希望对大家有帮助!
最近一段时间开发客户端app的感悟的更多相关文章
- WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转)
WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转) Windows Communication Foundation (WCF)是Microsoft为构建面向服务的应用提供的分布式通信 ...
- 关于近段时间论坛型APP 的一段舍弃
一直以为缓存务必要做的很好,好到什么程度呢,我曾这样想,用户在下滑数刷新的时候也要做到,先加载久缓存再加载新的,同时只改变旧的某些项.这样的想法真的很好!好到我花费了三天去设计数据库和服务器的 php ...
- 关于这段时间学习 EntityFramework的 一点感悟
Ado.Net,用了N多年,Entity Framework也关注了很多年. 每当项目转型的时候,就花费大巴的时间,学习一番,潮流的东西. 这个Orm很多,这个EF很火,这么多年了,我还是不敢用,虽然 ...
- 闲暇时间开发的个人app
最近一段时间公司不是很忙,晚上基本没怎么加班.所以自己利用晚上在家的时间开发了一个app(奇趣营),其实自从转android开发以来,就有想过要自己开发一个app.一方面可以提升自己的经验:另一方面可 ...
- 我想外包开发一个APP,需要多少钱,多少时间?
在一个阳光明媚的下午,我正瘫坐在椅子上改bug.忽然有人给我发微信:“我想做个app,多长时间,多少钱?” 从我从业iOS开发到现在,这个问题被问过无数次,比那句:“你是程序员,那你会修电脑吗?”还要 ...
- # 【ARM-Linux开发】在Win7的电脑上直接运行安装Ubuntu14.04发生的问题 标签(空格分隔): 【Linux开发】 --- > 一段时间以来,一直是在Windows上安装虚拟机
[ARM-Linux开发]在Win7的电脑上直接运行安装Ubuntu14.04发生的问题 标签(空格分隔): [Linux开发] 一段时间以来,一直是在Windows上安装虚拟机,然后安装Ubuntu ...
- 【Qt开发】Qt让线程休息一段时间
Qt 为何没有提供 Sleep 论坛上不时见到有人问: Qt 为什么没有提供跨平台的 sleep 函数? 使用平台相关的 Sleep 或 nanosleep 以后,界面为什么没有反应? QThread ...
- 跨平台移动APP开发进阶(二)HTML5+、mui开发移动app教程
前端开发APP,从HBuilder开始~ 序 通过 HTML5 开发移动App 时,会发现HTML5 很多能力不具备.为弥补HTML5 能力的不足,在W3C 中国的指导下成立了www.HTML5Plu ...
- web前端工程师在移动互联网时代里的地位问题 为啥C/S系统在PC端没有流行起来,却在移动互联网下流行了起来 为啥移动端的浏览器在很多应用里都是靠边站,人们更加倾向于先麻烦自己一下,下载安装个客户端APP
web前端工程师在移动互联网时代里的地位问题 支付宝十周年推出了一个新产品:支付宝的十年账单,我也赶个时髦查看了一下我的支付宝十年账单,哎,感慨自己真是太屌丝了,不过这只是说明我使用淘宝少了,当我大规 ...
随机推荐
- Spring3 整合Hibernate3.5 动态切换SessionFactory (切换数据库方言)
一.缘由 上一篇文章Spring3.3 整合 Hibernate3.MyBatis3.2 配置多数据源/动态切换数据源 方法介绍到了怎么样在Sping.MyBatis.Hibernate整合的应用中动 ...
- 如何开发Domino中的WebService
在domino中写webservice可以使用LotusScript,也可以使用java,由于LotusScript API提供的功能多数都是操作domino数据库中文档的,在web service中 ...
- Lotus中关于字符串处理的函数汇总
我们在使用LotusScript编写代理程序的时候,很多时候我们会遇到需要处理字符串的情况,本文就对平时遇到的相关函数做一个汇总. Sub Initialize Dim testStr As Str ...
- web项目总结
web项目 Webroot下面的index.jsp页面的内容: <%@ page language="java" pageEncoding="UTF-8" ...
- mac系统如何关闭root账户
第一步:系统偏好设置 ->用户与群组 第二步:登录选项 ->解锁 ->单击网络帐户服务器加入 第三步:打开目录实用工具 第四步:菜单栏 ->编辑 ->停用 Root 用户 ...
- 阅读《Effective C++》系列
<Effective C++>条款07:为多态基类声明virtual析构函数 这样做主要是为了防止内存泄漏,见我hexo博客. C++的虚析构函数 <Effective C++> ...
- [原]OpenGL基础教程(二)多边形绘制
上篇介绍了最基本的三角形绘制,本篇介绍如何使用索引的方式绘制多边行. 为什么要使用索引方式,总体来说提高性能.如何提高:使用顶点数组的好处是避免大量的函数调用.即避免每画一个顶点就调用1次glVert ...
- GNU风格 ARM汇编语法指南
汇编源程序一般用于系统最基本的初始化:初始化堆栈指针.设置页表.操作 ARM的协处理器等.这些初始化工作完成后就可以跳转到C代码main函数中执行. 1. GNU汇编语言语句格式 任何Linux汇编 ...
- C#中yield return用法分析
这篇文章主要介绍了C#中yield return用法,对比使用yield return与不使用yield return的流程,更直观的分析了yield return的用法,需要的朋友可以参考下. 本文 ...
- 基情四射的两个css样式
自定义blog样式时,代码段的line-height继承样式post的line-height,间隔太大了,决定再减小点,css都玩了几年了,感觉中这是很容易的事情.然后,就悲剧了好久,原先自定义样式表 ...