Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Twisted  で ロングポーリング チャットサーバ ナカイと素敵な会話を充実する
お前、誰よ。 <ul><li>名前 : Ian Lewis
所属 : BeProud
タグ : #beproud #redbull #python #django #appengine #kay_fw
http://www.ianlewis.org/
http://twitter.com/IanMLewis
http://bitbucket.org/IanLewis </li></ul>
お前、誰よ。 もう、いいよ!
お前、誰よ。 どうせ、皆知っているだろう
お前、誰よ。 <ul><li>名前 : Ian Lewis
所属 : BeProud
タグ : #beproud #redbull #python #django #appengine #kay_fw
http://www.ianlewis.org/
http://twitter.com/IanMLewis
http://bitbucket.org/IanLewis </li></ul>
このものと働いているよ
Nächste SlideShare
Wird geladen in …5
×

Twisted ロングポーリング チャット サーバ

2.825 Aufrufe

Veröffentlicht am

Twisted でチャットサーバの作り方

Veröffentlicht in: Technologie, Business
  • Als Erste(r) kommentieren

Twisted ロングポーリング チャット サーバ

  1. 1. Twisted で ロングポーリング チャットサーバ ナカイと素敵な会話を充実する
  2. 2. お前、誰よ。 <ul><li>名前 : Ian Lewis
  3. 3. 所属 : BeProud
  4. 4. タグ : #beproud #redbull #python #django #appengine #kay_fw
  5. 5. http://www.ianlewis.org/
  6. 6. http://twitter.com/IanMLewis
  7. 7. http://bitbucket.org/IanLewis </li></ul>
  8. 8. お前、誰よ。 もう、いいよ!
  9. 9. お前、誰よ。 どうせ、皆知っているだろう
  10. 10. お前、誰よ。 <ul><li>名前 : Ian Lewis
  11. 11. 所属 : BeProud
  12. 12. タグ : #beproud #redbull #python #django #appengine #kay_fw
  13. 13. http://www.ianlewis.org/
  14. 14. http://twitter.com/IanMLewis
  15. 15. http://bitbucket.org/IanLewis </li></ul>
  16. 16. このものと働いているよ
  17. 17. お前だれよ キモい
  18. 18. <ul><li>http://convore.com/
  19. 19. Pownce の Leah Culver
  20. 20. 旧 Mochi Media の Eric Florenzano
  21. 21. オンラインチャット
  22. 22. Eventlet を使う </li></ul>
  23. 24. Twisted Chat Server <ul><li>Twisted イベント駆動 Python フレームワーク
  24. 25. ロングポーリングを使う
  25. 26. ブラウザで、動かす。
  26. 27. http://10.189.0.122:8000/chat/1/
  27. 28. guest:guest </li></ul>
  28. 29. Twisted ナカイ サーバ
  29. 30. Long Polling $.ajax({ type: &quot;GET&quot;, url: &quot;http://localhost:8080/&quot;, async: true, /* If set to non-async, browser shows page as &quot;Loading..&quot;*/ cache: false, timeout:50000, /* Timeout in ms */ dataType: &quot;jsonp&quot;, jsonp: &quot;callback&quot;, success: function(data){ add_msg(data); setTimeout( 'waitForMsg()', /* Request next message */ 1000 /* ..after 1 seconds */ ); },
  30. 31. Long Polling class ChatServer(resource.Resource): … def render_GET(self, request): chat_d = defer.Deferred() chat_d.addCallback(partial(chat_msg, request)) chat_d.addErrback(println, &quot;chat error&quot;) self.deferred_list.append(chat_d) return server.NOT_DONE_YET
  31. 32. Message Post class ChatServer(resource.Resource): deferred_list = [] def render_POST(self, request): newdata = request.content.getvalue() data = json.loads(newdata) for i in range(len(self.deferred_list)): d = self.deferred_list.pop() d.callback(data) return 'OK'
  32. 33. Long Polling def chat_msg(request, chat_msg): callback = request.args.get(&quot;callback&quot;)[0]; request.setHeader('Content-Type', 'application/javascript') request.write(&quot;%s(%s)&quot; % (callback, json.dumps(chat_msg))) request.finish()
  33. 34. 質問 [email_address] @IanMLewis

×