はじめに
今回はPython製のWebサーバ&WebフレームワークであるTornadoを使ってチャットを作ってみます。Tornadoを使う理由は、デフォルトでWebSocketに対応しているため、リアルタイムのサービスを作りやすいからです。
使うもの
使うものは以下の2つです。
- Tornado
- jquery.ui.chatbox
サーバサイドにTornado、クライアントサイドにjquery.ui.chatboxを使います。jquery.ui.chatboxを使うと比較的楽にチャットを作れます。
コード
サーバサイドでメインの処理をしているのは以下のコード。waitersとmessagesに接続している人と送られてきたメッセージを記録しています。
class ChatHandler(tornado.websocket.WebSocketHandler):
waiters = set()
logs = []
def open(self, *args, **kwargs):
self.waiters.add(self)
self.write_message({'logs': self.logs})
def on_message(self, message):
message = json.loads(message)
self.logs.append(message)
for waiter in self.waiters:
if waiter == self:
continue
waiter.write_message({'img_path': message['img_path'], 'message': message['message']})
def on_close(self):
self.waiters.remove(self)
openメソッドでは接続してきた人の登録と、その人に対して今までのログを送信します。
on_messageメソッドでは、メッセージが送られてきたときに送られてきたメッセージを自分以外の参加者にブロードキャストします。また、このとき送られてきたメッセージはログに追加しておきます。
on_closeメソッドでは、接続が切断されたときにwaitersから接続者を削除します。これにより、切断された人にはメッセージをブロードキャストしないようにしています。
完成品
以下が完成品です。1時間くらいで作ったやっつけですが、ちゃんと動きます。上部のバーをクリックすることで、チャット画面の開閉を行えるのが特徴です。
サンプルコード
サンプルコードは以下のリンクからどうぞ。
おわりに
今回はTornadoを使ってチャットアプリを作ってみました。Pythonでちょっとしたリアルタイムのアプリケーションを作成したい場合はTornadoを使うといいと思います。