完全停止线程龙卷风 WebSocket 服务器
Fullly stopping a threaded tornado WebSocket server
为了测试一个WebSocket客户端,我正在写一个小的tornado WebSocket服务器,它驻留在一个指定的线程中,可以启动和停止
在测试运行期间。这是我到目前为止的想法:
class SocketHandler(tornado.websocket.WebSocketHandler):
def __init__(self, application, request, **kwargs):
super().__init__(application, request, **kwargs)
self.authenticated = False
def check_origin(self, origin):
return True
def open(self):
pass
def on_message(self, message):
pass
def on_close(self):
pass
application = tornado.web.Application([
(r"/ws", SocketHandler),
])
class WebSocketServer(threading.Thread):
def __init__(self, port):
threading.Thread.__init__(self, name='WebServer')
self.port = port
self.ioloop = None
def run(self):
self.ioloop = tornado.ioloop.IOLoop()
http_server_api = tornado.httpserver.HTTPServer(application)
http_server_api.listen(self.port)
self.ioloop.start()
http_server_api.stop()
self.ioloop.clear_instance()
def stop(self):
self.ioloop.add_callback(self.ioloop.stop)
启动服务器运行良好:
server = WebSocketServer(8888)
server.start()
我可以使用任何 WebSocket 客户端连接到服务器。不幸的是,当我停止服务器时:
server.stop()
线程关闭,正在移除服务器的监听端口,但所有已建立的WebSocket连接都保持不变。
我怎样才能关闭所有已建立的连接?感谢您的帮助!
在 Tornado 5.1 中,没有简单的方法可以为 websocket 连接执行此操作(对于常规 HTTP,有 HTTPServer.close_all_connections)。您只需要跟踪所有连接并明确关闭它们。 Tornado 自己的测试套件跳过了很多难看的环节来完成这项工作,而不会向日志发送关于不正常关机的警告。
在 Tornado 6.0 中,我想修复此问题,以便 HTTPServer.close_all_connections 知道 websocket 连接并关闭它们。
为了测试一个WebSocket客户端,我正在写一个小的tornado WebSocket服务器,它驻留在一个指定的线程中,可以启动和停止 在测试运行期间。这是我到目前为止的想法:
class SocketHandler(tornado.websocket.WebSocketHandler):
def __init__(self, application, request, **kwargs):
super().__init__(application, request, **kwargs)
self.authenticated = False
def check_origin(self, origin):
return True
def open(self):
pass
def on_message(self, message):
pass
def on_close(self):
pass
application = tornado.web.Application([
(r"/ws", SocketHandler),
])
class WebSocketServer(threading.Thread):
def __init__(self, port):
threading.Thread.__init__(self, name='WebServer')
self.port = port
self.ioloop = None
def run(self):
self.ioloop = tornado.ioloop.IOLoop()
http_server_api = tornado.httpserver.HTTPServer(application)
http_server_api.listen(self.port)
self.ioloop.start()
http_server_api.stop()
self.ioloop.clear_instance()
def stop(self):
self.ioloop.add_callback(self.ioloop.stop)
启动服务器运行良好:
server = WebSocketServer(8888)
server.start()
我可以使用任何 WebSocket 客户端连接到服务器。不幸的是,当我停止服务器时:
server.stop()
线程关闭,正在移除服务器的监听端口,但所有已建立的WebSocket连接都保持不变。 我怎样才能关闭所有已建立的连接?感谢您的帮助!
在 Tornado 5.1 中,没有简单的方法可以为 websocket 连接执行此操作(对于常规 HTTP,有 HTTPServer.close_all_connections)。您只需要跟踪所有连接并明确关闭它们。 Tornado 自己的测试套件跳过了很多难看的环节来完成这项工作,而不会向日志发送关于不正常关机的警告。
在 Tornado 6.0 中,我想修复此问题,以便 HTTPServer.close_all_connections 知道 websocket 连接并关闭它们。