読者です 読者をやめる 読者になる 読者になる

Keep on moving

あんまりまとまってないことを書きますよ

WebSocketでClock on Tornado

Tornado python WebSocket

Tornado のWebSocketを久々にいじって遊んでます。
pythonで別のWebSocketの処理実装diffract.meで出てくるClockを実装したことがなかったので書いてみました。
ついでにClockとは一秒ごとにWebSocketのサーバーの時間をメッセージで送って表示することです。

Tornadoのポイント

1秒ごとにメッセージを送るの必要があります、普通はpythonではtime.sleepを使うのが普通らしいのですが、
実はTornadoのWebSocketではtime.sleepをつかうと処理が固まってしまいます。
まだよく理解していないのですが、Tornadoの作り故に使えないようすです。
以下の様にioloopのadd_timeoutを使うことでTornadoではスケジューラっぽいことができるようです。
さらっと実装出来ると思っていたのですがここではまってしまいました。

class ClockWebSocket(websocket.WebSocketHandler):
    def open(self):
        self._send_clock()

    def _send_clock(self):
        nowtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        self.write_message(nowtime)
        tornado.ioloop.IOLoop.instance().add_timeout(time.time() + 1, self._send_clock)

ソース