geventをginkgoフレームワークで使ってみたよ
geventでWebSocketを使ってみる - へきょのーと
geventとWebSocketとFlask - へきょのーと
前回、前々回とgeventを使いましたが
今回はginkgoフレームワークを利用してやってみます。
※ginkgoの読みってギンコ??
インストール
git clone https://github.com/progrium/ginkgo.git
cd ginkgo/
sudo python setup.py install
コーディング
app.py
import os from ginkgo import Service from ginkgo.async.gevent import WSGIServer from geventwebsocket.handler import WebSocketHandler 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): f = open("./index.html"); content = f.read() f.close() def __init__(self): self.add_service(WSGIServer(('127.0.0.1', 8000), self.handle)) def handle(self, environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [self.content] class Application(Service): def __init__(self): self.add_service(Http()) self.add_service(WebSocket())
index.html
<html> <head> <title>ginkgo test</title> </head> <body> <h1>test</h1> <div> <input name="send_input" id="send_input" /> <input type="button" value="push" onclick="send_data()" /> </div> <div> <textarea id="view"></textarea> </div> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript"> var ws = new WebSocket("ws://127.0.0.1:8001/"); ws.onmessage = function(e) { $("#view").html($("#view").val() + e.data + "\n"); }; function send_data() { ws.send($("#send_input").val()); }; </script> </body> </html>
実行
ginkgo app.Application
ブラウザで"http://127.0.0.1:8000/"にアクセスして
input textに文字を入力して"push"すると
textareaに入力した内容が表示されました!