Ubuntu14.04 Python 2.7.6 でWebsocket実装
モジュールのインストール
sudo apt-get install libevent-dev python-dev python-setuptools
sudo easy_install gevent
sudo easy_install gevent-websocket
サーバスクリプト作成
vi chat.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import os
import random
from geventwebsocket.handler import WebSocketHandler
from gevent import pywsgi, sleep
ws_list = set()
def chat_handle(environ, start_response):
global cnt
ws = environ['wsgi.websocket']
ws_list.add(ws)a
print 'enter!', len(ws_list)
while 1:
msg = ws.receive()
if msg is None:
break
remove = set()
for s in ws_list:
try:
s.send(msg)
except Exception:
remove.add(s)
for s in remove:
ws_list.remove(s)
print 'exit!', len(ws_list)
def myapp(environ, start_response):
path = environ["PATH_INFO"]
print path
if path == "/":
start_response("200 OK", [("Content-Type", "text/html")])
return open('./chat_sample.html').read()
elif path == "/chat":
return chat_handle(environ, start_response)
raise Exception('Not found.')
server = pywsgi.WSGIServer(('0.0.0.0', 8080), myapp, handler_class=WebSocketHandler)
server.serve_forever()
クライアント側 HTML作成
vi chat_sample.html
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
$(function() {
var data = {};
ws = new WebSocket("ws://127.0.0.1:8080/chat");
ws.onopen = function() {
ws.send('hi');
};
ws.onmessage = function(e) {
$("#holder").append($('<p>'+e.data+'</p>'));
};
$('#sender').append($('<button/>').text('send').click(function(){
ws.send($('#message').val());
}));
});
</script>
</head>
<body>
<div id="sender">
<input type="text" id="message" value="text" />
</div>
<h3>Messages</h3>
<div id="holder"></div>
</body>
</html>
モジュール実行
python chat.py
確認
http://localhost:8080へアクセス
以下ではない
python -m SimpleHTTPServer 8080
python -m CGIHTTPServer 8080