锁定老帖子 主题:基于SAE的应用开发
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-16
Sina App Engine (简称SAE)是由新浪网研发中心出品的云计算平台,也是国内第一个公有云平台。从09年11月alpha版本发布到今年8月beta版上线,SAE已经进入了稳定运行的阶段。即使是在我们严格控制邀请码的情况下,也已经拥有了超过4000的开发者和超过3000的应用。光是新浪微博的应用频道,就有40个以上的应用运行在SAE上,而在Web应用的Top10中,有7个都运行于SAE。
SAE采用大家熟悉的PHP+Mysql作为主要环境。所以在SAE上开发应用并不需要学习新的知识,只需要注意一些细节就可以了。移植一个现有的PHP应用到SAE上是很简单的事情,之前我将WordPress移植到SAE上时就只花了3个小时。 本地文件操作在SAE上不允许对本地文件系统进行写操作。这既是系统架构的要求,也是为了保证代码的安全和应用的性能。 我们提供了TMPFS服务来解决临时文件的问题。TMPFS服务为开发者提供了一个目录,开发者可以将文件写到这个目录下,但是当本次请求结束时,这个文件将不再存在。 为了方便大家迁移项目,我们还允许大家利用PHP Wrapper通过文件系统函数来操作SAE的Memcache和Storage。大家知道Smarty是很依赖文件系统的模板,但是通过Wrapper方式,只需要修改非常少的代码,就可以让Smarty改为使用SAE的Memcache服务。(https://code.google.com/p/smarty4sae/) 数据抓取出于安全原因,SAE不允许应用直接抓取外部的数据。所有对外的抓取操作,都需要使用Fetchurl服务。相对于CURL来做,封装后的Fetchurl服务其实更为简单,也可以支持自定义头和cookie等操作。 数据库SAE使用的是标准的Mysql数据库,所以以Mysql为核心的应用不用做任何修改就能使用。Mysql的host和端口信息我们通过环境变量提供,直接在Runtime中获取就可以了。 我们强烈建议大家使用SaeMysql class来操作SAE的数据库,因为这个class默认进行了主从分离,可以避免在高并发时出现锁表等问题。 分布式存储由于不允许对本地文件系统进行写操作,我们提供了分布式存储服务来帮大家存放一些应用运行过程中产生的文件,比如用户上传的图片等。使用SaeStorage可以方便的保持这些内容并生成可访问的URL。 在了解了以上需要注意的地方后,大家就可以很容易的在SAE上开发应用了。 在开发应用之前,你需要有新浪微博的账号和SAE的账号。微博的账号可以在这里注册;SAE的账号在这里可以注册。 有了微博账号之后,就可以在微博开放平台创建应用了。 这部分微博开放平台上有详细的图文说明,就不再重复了。完成应用的创建后,可以得到应用App Key和App Secret。 在SAE上创建应用使用之前注册的SAE账号(不同于微博账号,是完全独立账号)登入SAE,在“我的应用”下,“创建应用”。 我们创建了一个appname为relink的应用,它可以通过relink.sinaapp.com进行访问。 在SAE上写微博应用不用从头开始,有方便快捷的应用向导可用。 在“应用向导”下选择“社会化应用”分类,点击“新浪微博OAuth框架”下边的“安装”按钮。 选择安装到应用“relink”下,安装为新版本1。 填写好我们从微博开放平台得到的微博应用的AppKey和AppSecret。 至此,我们已经完成了最基本的微博应用。 访问relink.sinaapp.com,已经可以进行应用的授权和当前用户最新微博的列表了。 编写代码接下来我们修改weiblolist.php的代码,加入“查看转发”连接。 进入应用“relink”的管理页面,点击左侧的“代码管理”,在右侧的“操作”列点击“编辑代码”,启用SAE的在线编辑器。 点击左侧的文件名,进入代码编辑。 我们给现在的微博列表添加一个“查看转发”的链接。 Ctrl+S发布代码,刷新页面看效果。 在点击编辑器左侧的新建文件按钮,创建show.php。 编写展示代码 <?php // 载入共用函数和配置 session_start(); include_once( 'config.php' ); include_once( 'saet.ex.class.php' ); header('Content-Type:text/html; charset=utf-8'); // 创建SaeTClient 对象 $c = new SaeTClient( WB_AKEY , WB_SKEY , $_SESSION['last_key']['oauth_token'] , $_SESSION['last_key']['oauth_token_secret'] ); // 获取并展示转发信息 if( $items = $c->oauth->get('http://api.t.sina.com.cn/statuses/repost_timeline.json' , array('id'=>$_REQUEST['sid'])) ):?> <div style="border:1px solid red;padding:5px;margin:5px">原始微博 - <?=$items[0]['retweeted_status']['user']['name']?>: <?=$items[0]['retweeted_status']['text']?></div> <?foreach( $items as $item ):?> <div style="border:1px solid #eee;padding:5px;margin:5px"><?=$item['user']['name']?>: <?=$item['text']?></div> <?endforeach;?> <?php endif; ?> 点击之前页面的“查看转发”链接,即可查看到相关信息。 基于SAE的微博应用开发作者 陈理捷 发布于 2010年12月15日 上午12时0分 <script src="http://s7.addthis.com/js/250/addthis_widget.js#username=infoq" type="text/javascript"></script> <!-- AddThis Button END -->之前在微博开发者大会上做过一个演讲,不过因为时间和形式的问题,忽略了很多细节。正好InfoQ的同学问我能不能写一篇文章,于是就有了本文。文章分三个部分,介绍篇讲SAE的基本情况;环境篇讲SAE和标准PHP环境的主要区别;实践篇则提供了一个完整的微博应用开发实例。 相关厂商内容介绍篇Sina App Engine (简称SAE)是由新浪网研发中心出品的云计算平台,也是国内第一个公有云平台。从09年11月alpha版本发布到今年8月beta版上线,SAE已经进入了稳定运行的阶段。即使是在我们严格控制邀请码的情况下,也已经拥有了超过4000的开发者和超过3000的应用。光是新浪微博的应用频道,就有40个以上的应用运行在SAE上,而在Web应用的Top10中,有7个都运行于SAE。
环境篇SAE采用大家熟悉的PHP+Mysql作为主要环境。所以在SAE上开发应用并不需要学习新的知识,只需要注意一些细节就可以了。移植一个现有的PHP应用到SAE上是很简单的事情,之前我将WordPress移植到SAE上时就只花了3个小时。 本地文件操作在SAE上不允许对本地文件系统进行写操作。这既是系统架构的要求,也是为了保证代码的安全和应用的性能。 我们提供了TMPFS服务来解决临时文件的问题。TMPFS服务为开发者提供了一个目录,开发者可以将文件写到这个目录下,但是当本次请求结束时,这个文件将不再存在。 为了方便大家迁移项目,我们还允许大家利用PHP Wrapper通过文件系统函数来操作SAE的Memcache和Storage。大家知道Smarty是很依赖文件系统的模板,但是通过Wrapper方式,只需要修改非常少的代码,就可以让Smarty改为使用SAE的Memcache服务。(https://code.google.com/p/smarty4sae/) 数据抓取出于安全原因,SAE不允许应用直接抓取外部的数据。所有对外的抓取操作,都需要使用Fetchurl服务。相对于CURL来做,封装后的Fetchurl服务其实更为简单,也可以支持自定义头和cookie等操作。 数据库SAE使用的是标准的Mysql数据库,所以以Mysql为核心的应用不用做任何修改就能使用。Mysql的host和端口信息我们通过环境变量提供,直接在Runtime中获取就可以了。 我们强烈建议大家使用SaeMysql class来操作SAE的数据库,因为这个class默认进行了主从分离,可以避免在高并发时出现锁表等问题。 分布式存储由于不允许对本地文件系统进行写操作,我们提供了分布式存储服务来帮大家存放一些应用运行过程中产生的文件,比如用户上传的图片等。使用SaeStorage可以方便的保持这些内容并生成可访问的URL。 在了解了以上需要注意的地方后,大家就可以很容易的在SAE上开发应用了。 实践篇接下来我们来看看如何从头到尾开发一个简单的微博应用。 应用目标先说说我们要做的应用。微博开放平台最近新增了一个接口,可以查询当前用户发布的某一条微博的转发信息。在微博平台上,信息通过转发进行链式传播,转发信息对微博营销来说是很重要的;而目前微博Web版本并不显示这些信息。所以我们想做一个应用,允许用户可以查看某条微博的转发情况。 具体做法如下:
准备工作在开发应用之前,你需要有新浪微博的账号和SAE的账号。微博的账号可以在这里注册;SAE的账号在这里可以注册。 有了微博账号之后,就可以在微博开放平台创建应用了。 这部分微博开放平台上有详细的图文说明,就不再重复了。完成应用的创建后,可以得到应用App Key和App Secret。 在SAE上创建应用使用之前注册的SAE账号(不同于微博账号,是完全独立账号)登入SAE,在“我的应用”下,“创建应用”。 我们创建了一个appname为relink的应用,它可以通过relink.sinaapp.com进行访问。 在SAE上写微博应用不用从头开始,有方便快捷的应用向导可用。 在“应用向导”下选择“社会化应用”分类,点击“新浪微博OAuth框架”下边的“安装”按钮。 选择安装到应用“relink”下,安装为新版本1。 填写好我们从微博开放平台得到的微博应用的AppKey和AppSecret。 至此,我们已经完成了最基本的微博应用。 访问relink.sinaapp.com,已经可以进行应用的授权和当前用户最新微博的列表了。 编写代码接下来我们修改weiblolist.php的代码,加入“查看转发”连接。 进入应用“relink”的管理页面,点击左侧的“代码管理”,在右侧的“操作”列点击“编辑代码”,启用SAE的在线编辑器。 点击左侧的文件名,进入代码编辑。 我们给现在的微博列表添加一个“查看转发”的链接。 Ctrl+S发布代码,刷新页面看效果。 在点击编辑器左侧的新建文件按钮,创建show.php。 编写展示代码 <?php // 载入共用函数和配置 session_start(); include_once( 'config.php' ); include_once( 'saet.ex.class.php' ); header('Content-Type:text/html; charset=utf-8'); // 创建SaeTClient 对象 $c = new SaeTClient( WB_AKEY , WB_SKEY , $_SESSION['last_key']['oauth_token'] , $_SESSION['last_key']['oauth_token_secret'] ); // 获取并展示转发信息 if( $items = $c->oauth->get('http://api.t.sina.com.cn/statuses/repost_timeline.json' , array('id'=>$_REQUEST['sid'])) ):?> <div style="border:1px solid red;padding:5px;margin:5px">原始微博 - <?=$items[0]['retweeted_status']['user']['name']?>: <?=$items[0]['retweeted_status']['text']?></div> <?foreach( $items as $item ):?> <div style="border:1px solid #eee;padding:5px;margin:5px"><?=$item['user']['name']?>: <?=$item['text']?></div> <?endforeach;?> <?php endif; ?> 点击之前页面的“查看转发”链接,即可查看到相关信息。 小结到这里,我们已经完成了应用的开发。虽然应用本身很简单,但是完整的演示了整个开发流程。期待大家都能在SAE上开发出优秀的微博应用。微博开放平台的接口可以查阅API文档,SAE提供的API可以访问http://apidoc.sinaapp.com/。 文章来源:http://www.infoq.com/cn/articles/clj-sae-mini-blog-app
我的sina app 应用地址:http://zhenghuazhi.sinaapp.com,如果你看到的是:SAE ERROR: APP IS OUT OF QUOTA,说明我的配额用完了,流量真少,效果见:http://huazhizheng.appspot.com.......希望新浪搞好一点。。。。。哎。。。。。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 5606 次