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

2,664 views

Published on

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

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,664
On SlideShare
0
From Embeds
0
Number of Embeds
790
Actions
Shares
0
Downloads
5
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

×