Python Hackathon 2011.02 に参加しに行ってきました。今回は、ちょっと遅く着いたが、楽しかった。
やったことはほとんどプレゼンの準備でした。発表したのは、Twistedで作られたロングポーリングチャットサーバの作り方についてでした。
チャットサーバ自体のコードはこんな感じ
#:coding=utf-8:
import sys
import json
from functools import partial
from time import sleep
from twisted.web import server, resource
from twisted.internet import reactor, defer
from twisted.application import internet, service
println = sys.stdout.write
def chat_msg(request, chat_msg):
callback = request.args.get("callback")[0];
request.setHeader('Content-Type', 'application/javascript')
request.write("%s(%s)" % (callback, json.dumps(chat_msg)))
request.finish()
class ChatServer(resource.Resource):
isLeaf = True
deferred_list = []
def render_POST(self, request):
#pprint(request.__dict__)
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'
def render_GET(self, request):
chat_d = defer.Deferred()
chat_d.addCallback(partial(chat_msg, request))
chat_d.addErrback(println, "chat error")
self.deferred_list.append(chat_d)
return server.NOT_DONE_YET
site = server.Site(ChatServer())
application = service.Application("simplechat")
server_obj = internet.TCPServer(8080, site)
server_obj.setServiceParent(application)