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)
ソース
次は
今日も明日もググったー: "chirpstream.twitter.com"をTornado WebSocketでやってみたいです。
ついったーのStreaming API ChirpUserStreamとWebSocketを組み合わせてみた - ( ꒪⌓꒪) ゆるよろ日記のまねをする予定です。