[Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

23
轻轻轻 Flash 轻轻轻轻轻轻轻 刘刘 刘刘刘刘刘刘刘刘 刘刘 Web/Social Game 刘刘

Transcript of [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

Page 1: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

轻量级 Flash 服务器开发框架

刘恒鱼之乐游戏工作室

从事 Web/Social Game 研发

Page 2: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

内容摘要 Python & Django 简介 Python & Django 开发 Flash 服务器实例 两种布署方式: Gae, 手动布署 Django 框架的限制 服务器优化的一些心得

Page 3: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

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服务器开发框架 刘恒

DRY(Do not Reapte Yourself) 之前开发一款休闲游戏的系统设计

Page 5: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

Python & Django 特点

学习曲线良好,上手容易无需编译不需要重启 Server 即可更改服务ORM 好用,操作类一样操作数据库维护一个地方,记住一套名字

所有都是自动完成的你只需要关心这里

Page 6: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

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服务器开发框架 刘恒

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服务器开发框架 刘恒

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服务器开发框架 刘恒

(Google App Engine) Google 08 年推出的一款云计算平台 很高的免费配额 , 超出免费部分便宜 配置使用相当方便 很好的可扩展性(云计算的特性:分布式计

算,分布式存储,容错处理)

GAEGAE

Page 10: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

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服务器开发框架 刘恒

GAE 免费配额

资源每日限制 最大速率

请求 4300 万次请求 3 万 次 请求 /分钟

传出带宽 10 GB 740 MB/ 分钟

传入带宽 10 GB 740 MB/ 分钟

CPU 时间 46 个 CPU 时 72 个 CPU 分钟 /分钟

Page 12: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

GAE 超出免费配额后的资费

资源 单位 单价传出带宽 GB $0.12

传入带宽 GB $0.10

CPU 时间 CPU 小时数 $0.10

存储数据 GB 每月 $0.15

接收电子邮件的收件人

收件人 $0.0001

Page 13: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

GAE 限制及缺陷 不能使用线程  不能使用 socket, 只开放 80 端口  不能使用本地文件系统 只支持 python and Java

服务器在国外,响应时间比较慢 国内不稳定,随时有被封杀的可能 数据备份不方便

限制

缺陷

Page 14: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

自己构建 Django 服务器Linux 2.6 64 位Apache & mod_python MysqlMemcachedPython (python-mysql,python-memcached)DjangoAmfast

Page 15: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

Django Performance

Page 16: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

Python+Django 的不足 Django 是一套 Web 开发框架,不能进行 socket 编程 , 不适

合做延迟要求很小的应用 国内 Python 社区人员相对较少 Pyamf/Amfast 目前在 Django 暂时不支持 Produce/

Consumer 模型 (Amfast+GAE 支持 ) ,如需要需手动实现长连接

Page 17: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

服务器优化的一些心得 Pysco将python转换为 C 提升性能 不处理静态数据,静态数据交给 Nginx 使用Apache+Threaded, 而不是Lighttpd,Nginx AMF替代XML,使用Amfast而不是Pyamf 尽可能多的使用 Memcached,而不是数据库 尽量使用NetConnection,而不是RemoteObject

Page 18: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

Django Performance

Page 19: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

Django on Apache Lighttpd Nginx

Apache is Best for Django

Page 20: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

Encode & Decode

Encode way Speed XML

Pyamf(AMF)

Amfast(AMF)

Page 21: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

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服务器开发框架 刘恒

NetConnection & RemoteObject

NetConnection RemoteObject

Page 23: [Flash开发者交流][2010.05.30]轻量级flash服务器开发框架 刘恒

先谢国家 再谢大家

Mail:[email protected] Blog:windytwang.javaeye.com