2010北京Adobe大会笔记(4.22下午)
奥多比开发者大会笔记—4 月22 日下午
(欢迎转载,但请注明原文地址)
?
?
2010 年4 月22 日13:30-14:30
Flash平台的下一代P2P技术
骆春山
?
1 概览
1.1 什么是P2P
1.2 Flash P2P 技术的相关知识
1.3 Flash P2P 的主要功能
1.4 代码讲解
2 P2P 的定义
2.1 P2P 应用举例:
2.1.1 point-to-point
2.1.2 swarming
2.1.3 stream vedio
2.2 技术术语
2.2.1 IP 组播
2.2.2 应用层组播
2.2.3 UDP Hole Punching
3 Flash P2P 技术的相关知识
3.1 Flash 平台通信技术的演化过程
3.1.1 9.0:集群,RTMP
3.1.2 10.1:引入P2P,RTMFP
3.1.3 10.2:完备的P2P,RTMFP
3.2 RTMP 与RTMFP 的比较
3.2.1 RTMFP 的特性:动态IP 地址,即IP 地址改变后可以在不丢失链接的情况下继续使用
3.3 Stratus—功能受限的Flash Media Server
3.3.1 目的:在新的P2P 技术推出之前帮助大家熟悉这个技术的各项细节
3.4 Groupspec—Flash P2P 中的组由Groupspec 字符串唯一便是
3.4.1 Groupspec 选项
4 Flash P2P 的主要功能
4.1 流媒体的直播
4.1.1 FMLE—识别视屏设备,加密,并将视频流发到Flash Media Server
4.1.2 RTMFP
4.1.2.1 企业内部:IP 组播
4.1.2.2 公共网:应用层组播
4.2 消息数据发送
4.3 分布式数据存储
5 代码演示
5.1 新的ActionScript 类
5.1.1 GroupSpecifier
5.1.2 NetGroup
5.1.3 NetStream
5.2 准备工作
5.2.1 从Adobe 网站获取Stratus 的developer Key
5.2.2 安装Flash Player 10.1 或者AIR 2
5.2.3 下载安装SWM
5.3 开始工作
5.3.1 连接服务器
5.3.2 加入P2P 组
5.3.3 找啊,找啊,找朋友
5.3.3.1 服务器帮助
5.3.3.2 通过自举节点
5.3.3.3 IP 组播发现
5.3.3.4 手动添加
5.3.3.5 向组内其他成员发送消息
5.4 使用分布式的数据存储
5.5 Flash P2P 的优势
5.5.1 功能全面
5.5.2 简单易用
5.5.3 可用Flash 本省的很多特性
5.6 所有的P2P 协议都是传染病协议
6 问答
6.1 太过依赖于Adobe,在特殊场合比如游戏中不好用?
6.1.1 这个不太会,游戏也是Flash SDK 的应用
PS:这哥们又出现了,就是上次上海大会说没有好用的C/C++ Socket 的那个
6.2 在NetGroup 中,对于开发者有没有办法控制网络层使用哪种算法?
6.2.1 应用程序没必要去复杂的网络层搅和
6.3 本地文件能否通过P2P 上传,即能否实现基于P2P 的文件共享?
6.3.1 Flash 不支持本地文件共享
6.3.2 文件的识别方式和流媒体不一样
6.3.3 可以用Posting 方式发送
6.4 P2P 方式现在有大规模应用么?
6.4.1 10.1 还没发布,所以目前没有大规模的应用
6.4.2 新浪正在和Adobe 进行紧密的合作
6.5 P2P 能节省带宽到什么程度,有具体数据么?
6.5.1 速度可达100-200K 之间的估值
6.5.2 目前还没有具体的数据
6.5.3 感兴趣的朋友可以尝试将原有的连接方式改成P2P 测试
6.6 Flash P2P 支持哪些平台,有手机么?
6.6.1 Anywhere,Flash 10.1 能用的地方,Flash P2P 都能用
6.7 Flash Media Server 有P2P 么?
6.7.1 有,本次会议的视频直播就是FMS 的P2P 应用
6.7.2 要加入协议,64 位,已经有了
6.7.3 最好用Struts,免费的,够用了
6.8 图片,声音资源用P2P 共享以后本地有缓存么?下载后,下一次打开直接加载的缓存有么?
6.8.1 由应用层控制
6.8.2 缓存放在哪里可以由用户自定义
6.9 P2P 可以实现游戏中的对战么,即延迟在100ms 以内?
6.9.1 Shape Player 可以做这件事情
6.9.2 不适合实时性太高的应用
6.9.3 用来下载游戏中的资源挺好
6.10 会开源么?
6.10.1 FMP 开源了,这个还没有,应该不会
6.11 对文件大小有限制么?
6.11.1 有,但是实际上文件是可以无限分割的,其实没有
6.12 Flash P2P 的发展可以理解为网页下载今后会代替客户端下载么?
6.12.1 这是个决策问题,技术层面上是完全可以的
6.13 P2P 只限于10.1 么,怎么进行商业合作?
6.13.1 是,只限于10.1 及以后版本
6.13.2 免费的只有struts
6.13.3 新浪已经开始商业合作了
6.14 现在看到的应用都是直播,对分布方式支持么?
6.14.1 P2P 的本质是一群人消费相同的数据,故直播是最得当的应用
6.14.2 但是还有刚刚提到的其他两大特点可供用户定制
6.15 怎么分享数据,支持直连么?
6.15.1 RTMFS 协议完成,应用层不用关心
6.15.2 服务器是超级种子,所以不用担心没有数据源,但是只有FMS 4 才支持
6.16 服务器能对流量进行限制么?
6.16.1 不能
6.17 对象分块存在,服务器上会保留分块信息么?
6.17.1 服务器不保留任何分块信息
6.18 多对多语音聊天用P2P 还是FMS 好?
6.18.1 目前只能保证延迟在8 秒以内,不是特别理想
6.18.2 这8 秒的延迟主要耗费在FME 编码,发送到服务器上
6.18.3 用户之间的数据传送延时较小
6.19 FMS 会提供API 么?
6.19.1 本来就支持
6.19.2 但是只有刚开始连接的时候才支持
6.20 UDP 打洞技术的缺陷怎么避免?
6.20.1 80%的文件类型都可以穿越
?
2010 年4 月22 日14:45-16:00
Flash,Flex 和AIR应用开发内存监测及优化技巧
Deepa
http://www.iamdeepa.com
?
1 性能问题贯穿开发过程的始终
2 概览
2.1 Flash Player 是如何分配内存的
2.2 Flash Player 是如何完成垃圾回收的
2.3 Flash Player 是如何优化渲染显示的
2.4 你该如何处理以下的问题
2.4.1 事件监听和字典
2.4.2 布局
2.4.3 AIR 的相关问题
2.5 Flash Builder Profiler 演示
3 Flash Player 虚拟机中的内存分配
3.1 Flash Player 虚拟机向操作系统申请内存
3.2 内存分配
3.2.1 以4096 字节为单位的内存块
3.2.2 在堆上分配
3.3 内存回收
3.3.1 伴随内存分配执行
3.3.2 不会在空闲时执行
3.4 每个属性4 字节+为属性类型分配的内存
3.5 可能永远不会被回收
4 Flash Player 的内存管理
4.1 Flash Player 分配的多数内存是相对小块的
4.1.1 过多小而频繁的内存分配会比较耗时
4.2 Flash Player 从操作系统获得大块内存
4.2.1 大块内存会被分割成成由固定大小的小块内存组成的内存池
4.3 当一个内存池被占满时,Flash Player 会向操作系统获得一块新内存
5 Flash Player 虚拟机中的垃圾回收
5.1 标准的标记清除垃圾回收器
5.2 增量扫描清除闲置对象(分段)
5.3 如果一个对象没有活动的引用指向它,则这个对象是可以被垃圾回收的
5.3.1 弱引用的用处
5.3.2 在Spark 框架中(Flex 4)中有add/remove 函数专门负责清除组件
5.3.3 无引用对象群,循环引用对象会被回收
5.4 垃圾回收并不是一直在运行
5.4.1 “收垃圾的人只在周五清晨来”
5.4.2 当某块内存被释放后,它并不一定会被在下次内存分配中使用,而仅由垃圾
回收器标记它为未使用
5.4.3 已经使用的内存保持不变
5.4.4 “把它放在垃圾桶中并不会使垃圾桶被清空”
5.5 垃圾回收仅会在引用程序运行的时候
5.5.1 当一个内存池快被占满的时候,向操作系统申请内存前会尝试执行垃圾回收
5.5.2 “去租影片的时候,人们不会去翻哪些最近刚还回来的影片,除非货架上所有其他的都被租出去了”
5.6 强类型是你的朋友
5.6.1 优先使用Vector 而不是Array(如果类型是单一的int 类型的话)
5.6.2 在你的代码中使用强类型
5.6.3 优先使用int 而不是number
5.6.4 当可能的时候,消除子表达式
5.6.4.1 通常出现在for 循环中,比如将循环中的判断条件提出
5.6.5 参考Flex framework 代码做优化
5.7 Flash Player 如何优化渲染显示
5.7.1 传统Flash Player 的可变跑道模型
5.7.2 Flex 组件的生命周期是建立在这个帧模型上的
5.7.3 失效/验证模型利用可变跑道来高效的完成工作
5.8 提示:Flex 组件开发中,使用延迟验证模型
5.8.1 失效/验证模型包括三组方法
5.8.1.1 更新组件属性
5.8.1.2 更新尺寸信息
5.8.1.3 更新渲染位置
5.8.1.4 这是一个很大的话题,建议去Adobe TV 上看相关的内容
5.9 提示:有些操作性能开销很大,精明的使用它们!
5.9.1 describeType()是一个高性能开销的方法
5.9.2 setStyle()也是一个
5.9.3 别在组件构建的早期使用setStyle(),你可能不得不重做这部分工作
5.9.4 在CreationComplete 之后使用setStyle()—足够晚了
5.9.5 使用选择器(类的或者类型的)来应用样式,而不是在大量的对象上一个一个的setStyle()
5.10 如何优化你的布局
5.10.1 避免多层嵌套组件容器
5.10.1.1 避免将组件容器放在另一个组件容器中
5.10.1.2 组件容器在MXML 组件或组件渲染器中作为最上层的控件
5.10.2 尽可能的使用绝对坐标布局
5.10.2.1 硬编码对象的位置坐标
5.10.2.2 硬编码对像的尺寸大小
5.11 提示:Flex 4—Group 容器是你的朋友
5.11.1 Group(VGroup,HGroup,TileGroup)
5.11.2 Group 是轻量级的容器(相对于VBox,HBox, Grids)
5.11.3 默认没有滚动功能(使用Scroller 类)
5.11.4 默认没有Clipping
5.11.5 为MXML 图片进一步优化
5.11.5.1 图形会共享显示对象,当可能的时候,它们会画在他们的父或兄弟显示对象中
5.11.5.2 在一个图形元素上设置alpha,blendMode,filter 或者Z-Older 则使它不能共享显示对象
5.12 AIR 相关的经验和技巧
5.12.1 当应用在后台工作时减轻帧负载
5.12.1.1 把处于闲置状态应用的frame rate 设为0
5.12.2 SQLite
5.12.2.1 一旦你初始化了一个SQLite 连接后,SQLite 即会产生若干开销
5.12.2.2 提示:直到你确定需要使用它的时候再进行实例化
5.12.3 AsyncFileStream 操作可能会是高开销的
5.12.3.1 处于等待状态的操作
5.12.3.2 时间处理函数
5.12.4 Native Window 的引用
5.12.4.1 在移除前,先清理所有显示对象,这样允许垃圾回收
?
2010 年4 月22 日16:00-17:00
中国Flash开发者社区及生态环境
周忠—Adobe中国研发中心高级项目经理
?
1 Adobe 中国研发中心概览
1.1 清华科技园
1.2 建于2006 年
1.3 目前有300 多名工程师,计划在2010 年400 人
1.4 工作内容涉及Adobe 多数产品的开发,测试等
2 Adobe 平台概览
3 Adobe Flash 技术平台推广团队
3.1 我们的团队
3.1.1 由10 个人组成的专门团队
3.1.2 面向开发者社区支持,高校支持,市场推广,培训认证等
3.2 我们的目标
3.2.1 壮大Adobe Flash player 中国开发队伍
3.2.2 进一步提高中国Flash 开发者的能力和水平
3.2.3 和中国市场共同成长
4 为什么要学习Flash
4.1 未来五年开发者的必备技能
4.2 RIA 产业的发展趋势
4.2.1 未来的两大趋势
4.2.2 Flash 应用的四大趋势
4.3 Flash RIA 人才的需求趋势
4.4 截止2010 年4 月,智联招聘网发布的空缺职位需求
4.4.1 Flash—9572 个
4.4.2 Flex—5334 个
PS:其实下面坐着的都不是学生-_-|||
5 Adobe Flash 平台的生态环境:从无到有的过程
5.1 包含的内容:合作伙伴,研发项目,互动社区,技术平台—开放
6 Flash 之路
7 开发者需要什么
7.1 互助,资讯,交友,个性展示,学习,工作,互助,提升
7.2 初学者:学习什么,如何学习,收获
7.3 中级开发者:交流机会,技术提高,提高影响力
7.4 高级开发者:发展趋势,回馈社区
8 Adobe 高校合作项目
?