geventとWebSocketとginkgoとFlask

geventでWebSocketを使ってみる - へきょのーと
geventとWebSocketとFlask - へきょのーと
geventをginkgoフレームワークで使ってみたよ - へきょのーと

前回、ginkgoフレームワークを利用してgeventを使いましたが
今回はそれにFlaskも組み込んでみます。

環境

Max OS X 10.6.8
Python 2.7.3
gevent 0.13.7
Ginkgo 0.5.0dev
Flask 0.9

インストール

※変更なし

コーディング

app.py
import os
from ginkgo import Service
from ginkgo.async.gevent import WSGIServer
from geventwebsocket.handler import WebSocketHandler
from flask import Flask, render_template

class WebSocket(Service):
    def __init__(self):
        self.add_service(WSGIServer(('127.0.0.1', 8001), self.handle,
                                       handler_class=WebSocketHandler))

    def handle(self, environ, start_response):
        if environ.get('wsgi.websocket'):
            ws = environ["wsgi.websocket"]
            while True:
                src = ws.receive()
                if src is None:
                    break
                ws.send(src)

class Http(Service):
    app = Flask(__name__)

    def __init__(self):
        self.add_service(WSGIServer(('127.0.0.1', 8000), self.app))

    @app.route("/", methods=['GET'])
    def index():
        return render_template('index.html')

class Application(Service):
    def __init__(self):
        self.add_service(Http())
        self.add_service(WebSocket())
index.html

※変更なし

実行

ginkgo app.Application

ブラウザで"http://127.0.0.1:8000/"にアクセスして
input textに文字を入力して"push"すると

textareaに入力した内容が表示されました!