Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

BPStudy #40 - Google Appengine 1.4.0

3,322 views

Published on

Published in: Technology
  • Login to see the comments

  • Be the first to like this

BPStudy #40 - Google Appengine 1.4.0

  1. 1. Google Appengine 1.4.0 Channel API, Warmup Requests, Metadata Queries などなど http://s.beproud.jp/channel-api
  2. 2. 自己紹介 <ul><li>名前 : Ian Lewis
  3. 3. 所属 : BeProud
  4. 4. タグ : #beproud #redbull #python #django #appengine #kayja #kay_fw
  5. 5. Appengine API Expert
  6. 6. http://www.ianlewis.org/
  7. 7. http://twitter.com/IanMLewis
  8. 8. http://bitbucket.org/IanLewis </li></ul>
  9. 9. タスクキュー正式リリース <ul><li>google.appengine.api.labs.taskqueue が deprecated になって、 google.appengine.api.taskqueue に移動。
  10. 10. Cron と タスクキューの時間制限が 10 分になりました。
  11. 11. タスクキューのデータがクオータに含まれる </li></ul>
  12. 12. タスクキュー正式リリース
  13. 13. タスクキュー正式リリース <ul><li>タスクをキューに投げる時に 実行するためのデータを一旦 DataStore に保存
  14. 14. このデータ量が クオータに 含まれる  </li></ul>
  15. 15. メタデータクエリー
  16. 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. 17. Always On <ul><li>ビリングを有効にすると、 3 つの常設インスタンスを立ち上げることができます。
  18. 18. あまりアクセスがこなくても、 spin up の時間がかからないので、早い </li></ul>
  19. 19. Warmup Request <ul><li>ロードが高くなっている時に新しいアプリケーションインスタンスを作って、ロードしてない状態でリクエストを投げる </li></ul>
  20. 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. 21. Channel API <ul><li>クライアントにデータを push することができる。
  22. 22. ユーザーに通信ソケット「チャンネル」を作る。
  23. 23. クライアントがそのソケットからデータを受けとります。 </li></ul>
  24. 24. Channel API
  25. 25. Channel API <ul><li>3つのステップがある。 </li><ul><li>チャンネルを作成。 ID をクライアントに渡す。
  26. 26. クライアントがソケットに接続する。ハンドラーを設定
  27. 27. チャンネルにメッセージを送信。クライアント側で受け取る。 </li></ul></ul>
  28. 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. 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. 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. 31. Channel と Socket の違い?
  32. 32. デモ http://s.beproud.jp/bpstudy40demo
  33. 33. デモ http://s.beproud.jp/bpstudy40map
  34. 34. 質問 [email_address] @IanMLewis

×