Download - [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒
![Page 1: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/1.jpg)
轻量级 Flash 服务器开发框架
刘恒鱼之乐游戏工作室
从事 Web/Social Game 研发
![Page 2: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/2.jpg)
内容摘要 Python & Django 简介 Python & Django 开发 Flash 服务器实例 两种布署方式: Gae, 手动布署 Django 框架的限制 服务器优化的一些心得
![Page 3: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/3.jpg)
Python & Django 简介
Python Simple and not Dirty
Django 不仅仅是 Rails 的 Python 版本 DRY( Do not Repeat Yourself ) MTV 框架 (Model,Template,Viewer, 类
MVC)
![Page 4: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/4.jpg)
DRY(Do not Reapte Yourself) 之前开发一款休闲游戏的系统设计
![Page 5: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/5.jpg)
Python & Django 特点
学习曲线良好,上手容易无需编译不需要重启 Server 即可更改服务ORM 好用,操作类一样操作数据库维护一个地方,记住一套名字
所有都是自动完成的你只需要关心这里
![Page 6: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/6.jpg)
Django 下实现认证系统 (Server端 )
Model:class User( models.Model ): name = models.CharField( max_length=10 ) password = models.CharField( max_length=10 ) update_time = models.DateTimeField()Services:class Login(object): def login( name,password ):
user = User.objects.filter(name=name)
if( user and user.password == password ):
return Truereturn False
![Page 7: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/7.jpg)
Django 下实现认证系统 (Client端 )
netConnection = new NetConnection();netConnection.connect(“http://localhost:8080/amf”);netConnection.call(“Login.login", responder, “liuheng”,”123456”);
服务器上同时可以显示如下调用信息,方便 DebugCall Login.register(“liuheng”,”123456” ) Debug ‘hello’Return True
![Page 8: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/8.jpg)
ORM (对象 - 关系数据库映射)定义:class User( db.Model ): app_id = db.IntegerProperty() app_type = db.IntegerProperty() name = db.StringProperty() pic = db.StringProperty()
使用:user= User()user.app_id = 1user.save() #insert or updateuser.delete() #deleteuser = User.objects.filter( app_id=1 ) #select
DataBase
AS Class
![Page 9: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/9.jpg)
(Google App Engine) Google 08 年推出的一款云计算平台 很高的免费配额 , 超出免费部分便宜 配置使用相当方便 很好的可扩展性(云计算的特性:分布式计
算,分布式存储,容错处理)
GAEGAE
![Page 10: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/10.jpg)
GAE 构成 Web Server DataBase Local Test Framework Memcached Logging System moniter Version Control Timed task
+Apache+Mysql
+Memcached
+Cacti
+Crontab
=GAE
![Page 11: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/11.jpg)
GAE 免费配额
资源每日限制 最大速率
请求 4300 万次请求 3 万 次 请求 /分钟
传出带宽 10 GB 740 MB/ 分钟
传入带宽 10 GB 740 MB/ 分钟
CPU 时间 46 个 CPU 时 72 个 CPU 分钟 /分钟
![Page 12: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/12.jpg)
GAE 超出免费配额后的资费
资源 单位 单价传出带宽 GB $0.12
传入带宽 GB $0.10
CPU 时间 CPU 小时数 $0.10
存储数据 GB 每月 $0.15
接收电子邮件的收件人
收件人 $0.0001
![Page 13: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/13.jpg)
GAE 限制及缺陷 不能使用线程 不能使用 socket, 只开放 80 端口 不能使用本地文件系统 只支持 python and Java
服务器在国外,响应时间比较慢 国内不稳定,随时有被封杀的可能 数据备份不方便
限制
缺陷
![Page 14: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/14.jpg)
自己构建 Django 服务器Linux 2.6 64 位Apache & mod_python MysqlMemcachedPython (python-mysql,python-memcached)DjangoAmfast
![Page 15: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/15.jpg)
Django Performance
![Page 16: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/16.jpg)
Python+Django 的不足 Django 是一套 Web 开发框架,不能进行 socket 编程 , 不适
合做延迟要求很小的应用 国内 Python 社区人员相对较少 Pyamf/Amfast 目前在 Django 暂时不支持 Produce/
Consumer 模型 (Amfast+GAE 支持 ) ,如需要需手动实现长连接
![Page 17: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/17.jpg)
服务器优化的一些心得 Pysco将python转换为 C 提升性能 不处理静态数据,静态数据交给 Nginx 使用Apache+Threaded, 而不是Lighttpd,Nginx AMF替代XML,使用Amfast而不是Pyamf 尽可能多的使用 Memcached,而不是数据库 尽量使用NetConnection,而不是RemoteObject
![Page 18: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/18.jpg)
Django Performance
![Page 19: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/19.jpg)
Django on Apache Lighttpd Nginx
Apache is Best for Django
![Page 20: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/20.jpg)
Encode & Decode
Encode way Speed XML
Pyamf(AMF)
Amfast(AMF)
![Page 21: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/21.jpg)
Memcached( 分布式 Key-Value 缓存系统)配置 Settings.py:
CACHE_BACKEND = 'memcached://127.0.0.1:11211/‘Class User: # 给 User 类加上缓存 @staticmethod
def get( name ): user = cache.get('user_%s'%name) if( not user ): try: user = User.objects.get(name=name) cache.set('user_%s'%user.name,user) except: pass return userdef save(self): super(User,self).save() # 先 Save, 后更新 Cache
cache.set('user_%s'%user.name,user)
![Page 22: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒](https://reader033.vdocuments.net/reader033/viewer/2022061416/5556c12dd8b42ad94d8b4b2c/html5/thumbnails/22.jpg)
NetConnection & RemoteObject
NetConnection RemoteObject