WebSockectによって、ブラウザとサーバ間で双方向・全二重の通信を行なうことができます。
WebSockectを行なうためには、対応したブラウザが必要です。
ターミナルで、以下のコマンドによってサーバプログラムをダウンロードします。
適当なディレクトリに、以下のプログラムをserver_wsh.pyというファイル名で作成します。
from mod_pywebsocket import msgutil
connections = []
def web_socket_do_extra_handshake(request):
pass
def web_socket_transfer_data(request):
connections.append(request)
while True:
try:
message = msgutil.receive_message(request)
except:
return
for con in connections:
try:
msgutil.send_message(con, message)
except:
connections.remove(con)
WebSockectの例として、簡単なチャットシステムを作成してみます。
以下のHTMLをchat.htmlというファイル名で保存します。
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<title>simple chat</title>
</head>
<body>
<h1>
Chat
</h1>
<textarea id = "chat" readonly cols = 20 rows = 10></textarea>
<br>
<input id = "name" type = "text" size = 6 placeholder = "Name">
<input id = "message" type = "text" size = 20 placeholder = "Message">
<botton id = "submitButton" onclick = "submitMessage()" disabled>
Send
</button>
<script type = "text/javascript">
var ws = new WebSocket("ws://localhost/server");
ws.onmessage = function(event) {
var ci = document.getElementById("chat");
ci.textContent += event.data + "\n";
};
ws.onopen = function(event) {
document.getElementById("submitButton").disabled = false;
};
ws.onclose = function(event) {
document.getElementById("submitButton").disabled = true;
};
function submitMessage() {
var name = document.getElementById("name").value;
var message = document.getElementById("message").value;
ws.send(name + "->" + message);
}
</script>
</body>
</html>