WebSocketを試す(クライアント編)

以下のURLを参考にチャットサービスを作りました
ほとんどコピーなのですが。。^^;
有用な情報に感謝!

http://blog.livedoor.jp/kotesaki/archives/1355651.html

ただ、日本語が通らない。。><;
とりあえず日本語以外では動くことは確認できました。

from mod_pywebsocket import msgutil

import thread
import getopt
import os
import sys
import time
import datetime
import codecs

_GOODBYE_MESSAGE = 'Goodbye'
file = '/somewhere/test'

class tail():

last_mtime = None

def __init__(self, filename, delay, sock):
self.filename = filename
self.delay = delay
self.sock = sock

def run(self):
while True:
time.sleep(self.delay)
stat = os.stat(self.filename)

if stat.st_mtime != self.last_mtime:
self.last_mtime = stat.st_mtime
self.read()

def read(self):
try:
length = 0
f = open(self.filename, 'r')
for line in f:
length += 1

f.seek(0)
cnt = 0

for line in f:
cnt += 1
if cnt == length:
msgutil.send_message(self.sock, line[:-1])
f.close
except Exception:
if(f):
f.close

def web_socket_do_extra_handshake(request):
pass # Always accept.


def web_socket_transfer_data(request):
attr = ()
thread.start_new_thread(tail(file, 0.5, request).run, attr)
while True:
try:
#line = request.ws_stream.receive_message()
line = msgutil.receive_message(request)

if isinstance(line, unicode):
d = datetime.datetime.today()
line = line + ' [' + d.strftime('%Y-%m-%d %H:%M:%S') + '] \r\n'

print("okok -> " + line)
f = open(file, 'a')
f.write(line)
os.fsync(f.fileno())
f.flush()
f.close

if line == _GOODBYE_MESSAGE:
return
except Exception:
return

あとはクライアントHTMLも準備。




Sample Page



サンプル

※実験中のため、日本語は使えません...

message...

user





何とか動きました。
面白いなぁ。これ。