Я использую SocketIO для потоковой передачи данных Twitter (после должной обработки в слое Spark) для потоковой передачи данных в браузер. Тем не менее, я заметил, что событие разъединения сокета запускается случайным образом, говоря:
Клиент ушел, закрывая сокет
Кроме того, я использую Eventlet, а библиотека обезьяна залатана. По запросу на обслуживание сервер выгружает весь рабочий процесс в поток, как показано в следующем фрагменте, поэтому сервер может свободно обрабатывать пакеты PING / PONG.
wf = work_flow.get(current_user.get_id())
if not wf:
wf = work_flow.WorkFlow(current_user.get_id())
work_flow.add(wf)
keys = request.form['search_terms']
interval = request.form['report_interval']
print('Search Terms: ', keys)
print('Report Interval: ', interval)
keys = keys.strip().split()[0].strip()
interval = int(interval.strip())
wf.first_docid = None
wf.thread_event = threading.Event()
wf.thread = socketio.start_background_task(start_procs, wf.userid, keys, interval)
return redirect(url_for('.search_results', keys=keys, interval=interval))