import tornado.web
import tornado.websocket
from tornado.ioloop import IOLoop #异步池
from tornado import gen #多线程
import tornado.options #全局显示命令行
from tornado.concurrent import run_on_executor #同步转异步
from concurrent.futures import ThreadPoolExecutor #线程池
import time
class ExecutorBase(object):
executor = ThreadPoolExecutor(5)#线程池
class DebugWebsocket(tornado.websocket.WebSocketHandler, ExecutorBase):
user_list=[] #成员数组
def check_origin(self, origin):
#校验权限,允许所有连接,或,只允许某域名
return True
def open(self):
print("有新连接",self.request.remote_ip,self.get_query_argument("aa",""))#get取值
self.user_list.append(self)#添加成员到数组
@gen.coroutine #多线程运行
def on_message(self, message):#收消息
print("收到->",message)
# resp = yield self.resp_time(message)#异步转同步
for A in self.user_list:
A.write_message(message)
# self.write_message(resp)
def on_close(self):
self.user_list.remove(self)#删除数组成员
print("连接断开",self.request.remote_ip)
@run_on_executor #同步转异步
def resp_time(self, message):
# time.sleep(5)
return message
@classmethod #类修饰符,不用new也能调用
def zhudong(cls,message):
print(112)
for A in cls.user_list:
A.write_message(message)
class MainHandler(tornado.web.RequestHandler):
def get(self):
#http调用socket方法
DebugWebsocket.zhudong('主动发消息')
self.write("Hello, world")
if __name__ == '__main__':
print('->start')
tornado.options.parse_command_line() #全局显示命令行
app=tornado.web.Application([ #路由
(r"/w", DebugWebsocket),
(r"/", MainHandler),
])
app.listen(5000)
IOLoop.current().start()