server.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. demeter tcp
  5. name:server.py
  6. author:rabin
  7. """
  8. from tornado.tcpserver import TCPServer
  9. from tornado.ioloop import IOLoop
  10. class Connection(object):
  11. clients = set()
  12. def __init__(self, stream, address):
  13. Connection.clients.add(self)
  14. self._stream = stream
  15. self._address = address
  16. self._stream.set_close_callback(self.on_close)
  17. self.read_message()
  18. print "A new user has entered the chat room.", address
  19. def read_message(self):
  20. self._stream.read_until('\n', self.broadcast_messages)
  21. def broadcast_messages(self, data):
  22. print "User said:", data[:-1], self._address
  23. for conn in Connection.clients:
  24. conn.send_message(data)
  25. self.read_message()
  26. def send_message(self, data):
  27. self._stream.write(data)
  28. def on_close(self):
  29. print "A user has left the chat room.", self._address
  30. Connection.clients.remove(self)
  31. class ChatServer(TCPServer):
  32. def handle_stream(self, stream, address):
  33. print "New connection :", address, stream
  34. Connection(stream, address)
  35. print "connection num is:", len(Connection.clients)
  36. if __name__ == '__main__':
  37. print "Server start ......"
  38. server = ChatServer()
  39. server.listen(8000)
  40. IOLoop.instance().start()