Your SlideShare is downloading. ×
0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

BPStudy #40 - Google Appengine 1.4.0

2,779

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,779
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Google Appengine 1.4.0 Channel API, Warmup Requests, Metadata Queries などなど http://s.beproud.jp/channel-api
  • 2. 自己紹介 <ul><li>名前 : Ian Lewis
  • 3. 所属 : BeProud
  • 4. タグ : #beproud #redbull #python #django #appengine #kayja #kay_fw
  • 5. Appengine API Expert
  • 6. http://www.ianlewis.org/
  • 7. http://twitter.com/IanMLewis
  • 8. http://bitbucket.org/IanLewis </li></ul>
  • 9. タスクキュー正式リリース <ul><li>google.appengine.api.labs.taskqueue が deprecated になって、 google.appengine.api.taskqueue に移動。
  • 10. Cron と タスクキューの時間制限が 10 分になりました。
  • 11. タスクキューのデータがクオータに含まれる </li></ul>
  • 12. タスクキュー正式リリース
  • 13. タスクキュー正式リリース <ul><li>タスクをキューに投げる時に 実行するためのデータを一旦 DataStore に保存
  • 14. このデータ量が クオータに 含まれる  </li></ul>
  • 15. メタデータクエリー
  • 16. メタデータクエリー <ul><li>Namespace 、 Entity 、 Property のメタデータをクエリーすることができるようになりました。 </li></ul>for namespace in Namespace . all(): print namespace . namespace_name for kind in Kind . all(): print kind . kind_name for property in Property . all() . ancestor(kind): print &quot; %s&quot; % property . property_name
  • 17. Always On <ul><li>ビリングを有効にすると、 3 つの常設インスタンスを立ち上げることができます。
  • 18. あまりアクセスがこなくても、 spin up の時間がかからないので、早い </li></ul>
  • 19. Warmup Request <ul><li>ロードが高くなっている時に新しいアプリケーションインスタンスを作って、ロードしてない状態でリクエストを投げる </li></ul>
  • 20. Warmup Request <ul><li>新しいインスタンスを立ち上げる時に、ユーザーからのリクエストが来る前に warmup リクエストを投げる。 </li></ul>inbound_services : - warmup - url : /_ah/warmup.* script : warmup.py import mybigmodule import myothermodule def main(): print &quot;Content-type: text/plain&quot; print &quot;OK&quot;
  • 21. Channel API <ul><li>クライアントにデータを push することができる。
  • 22. ユーザーに通信ソケット「チャンネル」を作る。
  • 23. クライアントがそのソケットからデータを受けとります。 </li></ul>
  • 24. Channel API
  • 25. Channel API <ul><li>3つのステップがある。 </li><ul><li>チャンネルを作成。 ID をクライアントに渡す。
  • 26. クライアントがソケットに接続する。ハンドラーを設定
  • 27. チャンネルにメッセージを送信。クライアント側で受け取る。 </li></ul></ul>
  • 28. Channel API from google.appengine.ext import webapp from google.appengine.api import channel from django.template.loader import render_to_string class MyHandler(BaseHandler): def get(self): user = users . get_current_user() # ユーザーのチャンネルを作る # create_channel に渡すデータは単の文字列でも大丈夫 id = channel . create_channel(user) return self . response.out . write(render_to_string( &quot;index.html&quot; , { &quot;channel_id&quot; : id}))
  • 29. Channel API from google.appengine.api import channel from google.appengine.api import users class AjaxHandler(BaseHandler): def get(self): user = users . get_current_user() # メッセージをクライアントに渡す。 # クライアントが接続している状態が不要 # 誰も接続してない場合は何もしない # ここでテキストデータを送るけど、 JSON がおすすめです channel . send_message(user, &quot;Hello World!!&quot; )
  • 30. Channel API var channel = new goog.appengine.Channel( &quot;{{ channel_id }}&quot; ); var socket = channel . open(); socket . onopen = function() { window . setTimeout( function () { alert ( 'Connected!' )}, 100); } // メッセージのハンドラーを登録 socket.onmessage = function (evt) { // テキストを受けているけど、 JSON がおすすめ // var o = JSON.parse(evt.data); alert (evt.data); // do something }
  • 31. Channel と Socket の違い?
  • 32. デモ http://s.beproud.jp/bpstudy40demo
  • 33. デモ http://s.beproud.jp/bpstudy40map
  • 34. 質問 [email_address] @IanMLewis

×