Почти в каждом найденном мной примере Flask/Socket.io Socket.io запускает событие, которое затем обрабатывается приложением Flask и выдает любой ответ.
Мне нужно последовательно отправлять новые данные на страницу без триггера события. В онлайн-руководстве Flask/Socket.io кратко упоминается об этом, но я м вроде застрял.
На данный момент я только отправляю данные о клиентских подключениях, создавая новый поток для каждого подключения. Вот мой код для этого:
@socketio.on('connect', namespace='/test')
def test_connect():
# need visibility of the global thread objects
print "We're working"
global thread
print('Client connected')
if not thread.isAlive():
print "Starting Thread"
thread = RandomThread()
thread.start()
А потом:
class RandomThread(Thread):
def __init__(self):
self.delay = 6
super(RandomThread, self).__init__()
## Find Tweets every X amount of seconds
def tweetFinder(self):
print "Finding Tweets..."
while not thread_stop_event.isSet():
twit = Twitter()
twit.login()
cityName = twit.getUserTweets()
print cityName
socketio.emit('newnumber', {'number': cityName}, namespace='/test')
sleep(self.delay)
def run(self):
self.tweetFinder()
Но как мне запустить этот поток/процесс загрузки данных сразу при запуске приложения? Я просто хочу, чтобы он работал как непрерывная бесконечная задача в бэкэнде, обновляя страницу независимо от событий.
Вот что говорят документы Flask/Socket-io, я просто не могу понять, как заставить его работать так, как я хочу.
Во всех примерах, показанных до этого момента, сервер отвечает на событие, отправленное клиентом. Но для некоторых приложений сервер должен быть отправителем сообщения. Это может быть полезно для отправки клиентам уведомлений о событиях, происходящих на сервере, например, в фоновом потоке. Методы socketio.send() и socketio.emit() можно использовать для трансляции всем подключенным клиентам:
def some_function():
socketio.emit('some event', {'data': 42})
Обратите внимание, что в этом случае нет клиентского контекста, поэтому предполагается, что широковещательная рассылка = True, и его не нужно указывать.
socketio.run()
? - person Miguel   schedule 19.12.2014