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

Tornado v0.2 で websocket やってみた

python websocket

tornado は git clone してきて python setup.py install したものを使っています。

コードは tornade/websocket.py に書いてあったコメントそのままです。なんかコメント少し間違ってますね、send_message って書いてますが write_message ですね。

さて、これの問題としては今繋がっているであろう connect 一覧がとれないということです。open した時に何かしらグローバル変数のリストで持ってるのがスマートなのかな。でも close したときに気づけないとリストの中身が増え続けるので微妙。

さて、どうしたものか。

main.py

# vim: fileencoding=utf8

import time
import datetime

import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.websocket

import simplejson

class EchoWebSocket(tornado.websocket.WebSocketHandler):
  def open(self):
    self.receive_message(self.on_message)

  def on_message(self, message):
    self.write_message(u"You said: " + message)

application = tornado.web.Application([
  (r"/websocket", EchoWebSocket),
])

def main():
  http_server = tornado.httpserver.HTTPServer(application)
  http_server.listen(8888)
  tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
  main()

index.html

<html>
  <head>
    <title></title>
    <script language="javascript">
      var ws = new WebSocket("ws://localhost:8888/websocket");
      ws.onopen = function() {
       ws.send("Hello, world");
      };
      ws.onmessage = function (evt) {
       alert(evt.data);
      };
    </script>
  </head>
  <body>
  </body>
</html>