#!/usr/bin/env python # -*- coding: utf-8 -*- """ demeter tcp name:server.py author:rabin """ from tornado.tcpserver import TCPServer from tornado.ioloop import IOLoop class Connection(object): clients = set() def __init__(self, stream, address): Connection.clients.add(self) self._stream = stream self._address = address self._stream.set_close_callback(self.on_close) self.read_message() print "A new user has entered the chat room.", address def read_message(self): self._stream.read_until('\n', self.broadcast_messages) def broadcast_messages(self, data): print "User said:", data[:-1], self._address for conn in Connection.clients: conn.send_message(data) self.read_message() def send_message(self, data): self._stream.write(data) def on_close(self): print "A user has left the chat room.", self._address Connection.clients.remove(self) class ChatServer(TCPServer): def handle_stream(self, stream, address): print "New connection :", address, stream Connection(stream, address) print "connection num is:", len(Connection.clients) if __name__ == '__main__': print "Server start ......" server = ChatServer() server.listen(8000) IOLoop.instance().start()