Skip to content

Commit

Permalink
Add a close() method to the SocketIO class (fixes #162)
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelgrinberg committed Nov 18, 2015
1 parent f6610d3 commit cbfacad
Showing 1 changed file with 23 additions and 6 deletions.
29 changes: 23 additions & 6 deletions flask_socketio/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ class SocketIO(object):
def __init__(self, app=None, **kwargs):
self.server = None
self.server_options = None
self.wsgi_server = None
self.handlers = []
self.exception_handlers = {}
self.default_exception_handler = None
Expand Down Expand Up @@ -376,23 +377,39 @@ def run_server():
if not log_output:
log = None
if websocket:
server = pywsgi.WSGIServer((host, port), app,
handler_class=WebSocketHandler,
log=log)
self.wsgi_server = pywsgi.WSGIServer(
(host, port), app, handler_class=WebSocketHandler,
log=log)
else:
server = pywsgi.WSGIServer((host, port), app, log=log)
self.wsgi_server = pywsgi.WSGIServer((host, port), app, log=log)

if use_reloader:
# monkey patching is required by the reloader
from gevent import monkey
monkey.patch_all()

def run_server():
server.serve_forever()
self.wsgi_server.serve_forever()

run_with_reloader(run_server, extra_files=extra_files)
else:
server.serve_forever()
self.wsgi_server.serve_forever()

def stop(self):
"""Stop a running SocketIO web server.
This method must be called from a HTTP or SocketIO handler function.
"""
if self.server.eio.async_mode == 'threading':
func = flask.request.environ.get('werkzeug.server.shutdown')
if func:
func()
else:
raise RuntimeError('Cannot stop unknown web server')
elif self.server.eio.async_mode == 'eventlet':
raise SystemExit
elif self.server.eio.async_mode == 'gevent':
self.wsgi_server.stop()

def test_client(self, app, namespace=None):
"""Return a simple SocketIO client that can be used for unit tests."""
Expand Down

0 comments on commit cbfacad

Please sign in to comment.