直接代码:
# -*- coding: utf-8 -*-
import json
import traceback
from tornado.websocket import WebSocketHandler
from tornado.web import Application
from tornado.ioloop import IOLoop
pc_front = 'sport_display'
Web_front = 'pc_name'
class ClientManager(object):
def __init__(self):
self.__clients = {}
def add_client(self, name, client):
self.__clients[name] = client
def remove_client(self, name):
if name in self.__clients:
del self.__clients[name]
def send_message_to_all_except_one(self, excepted_name, message):
for k, v in self.__clients.items():
if k != excepted_name:
v.write_message(message)
def send_message_to_specific_user(self, other_name, message):
if other_name in self.__clients:
self.__clients[other_name].write_message(message)
def get_client_list(self):
return self.__clients.keys()
class MainHandler(WebSocketHandler):
__client_manager = ClientManager()
def open(self):
self.set_nodelay(True)
self.__name = ''
def on_message(self, message):
try:
# if len(message) <= 128:
# data = json.loads(message)
# if data['service'] == 'login':
# self.__name = data['name']
# MainHandler.__client_manager.add_client(self.__name, self)
# resp = {}
# resp['service'] = 'generate_existed_clients'
# resp['clients'] = MainHandler.__client_manager.get_client_list()
# self.write_message(json.dumps(resp))
MainHandler.__client_manager.send_message_to_all_except_one(self.__name, message)
data = json.loads(message)
print(data)
except Exception as e:
traceback.print_exc()
def on_close(self):
MainHandler.__client_manager.remove_client(self.__name)
self.close()
if __name__ == '__main__':
Application([
('/', MainHandler),
]).listen(10040)
IOLoop.instance().start()