Страница Flask Socketio должна обновляться каждый раз для отправки сообщения - PullRequest
0 голосов
/ 23 января 2019

Итак, у меня был сценарий Python socketio, который регистрируется на веб-сайте и выполняет некоторую обработку, а затем сохраняет результат в переменной. Этот процесс селена определяется в функции, которая запускается, когда пользователь нажимает на кнопку из внешнего интерфейса. Ниже приведен короткий фрагмент того, что я сделал:

from flask import Flask, render_template
from flask_socketio import SocketIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

def selenium_process(data):
    (Some process that involves selenium)
    values = stores the result
    ..
    ..
    ..
    return values


@socketio.on('message')
def handle_message(message):
    dataval = selenium_process(data)
    socketio.emit('showresult',dataval)


if __name__ == '__main__':
    socketio.run(app,host='my_ip',port=random_port)


Это пример файла html + js, который действует как клиент:

<html>
    <head>
        <script src='http://code.jquery.com/jquery-1.7.2.min.js'></script>
        <script src='http://localhost:3001/socket.io/socket.io.js'></script>
        <script>
        <button onclick="myFunction()">Click me</button>
            var socket = io.connect('http://localhost:3001');
            function myFunction() 
            {
                data = {}
                socket.emit('message',data);
            }
            socket.on('showresult') {
                console.log(data);
            });
        </script>
    </head>
</html>

Код работает нормально, хотя результат, полученный от сервера python, отправляется только один раз обратно js-клиенту после завершения процесса selenium. После этого мне нужно вручную обновить веб-страницу и затем выполнить команду emit, чтобы получить сообщение на внешнем интерфейсе. .
Какую ошибку я делаю?

EDIT:
Процесс:
- Я нажал кнопку «Нажми меня» на клиенте js, который запускает процесс селена на стороне сервера python.
- Идет небольшая обработка, которая включает регистрацию на веб-сайте и выборку данных вместе с нумерацией страниц.
-Результат сохраняется в переменной, а затем сервер отправляет этот результат обратно клиенту.
- На стороне клиента результат отображается на консоли.
- Таким образом, это происходит только один раз. Если бы я нажал кнопку «Нажми меня» еще раз без обновления, снова начался бы процесс, данные были бы извлечены и сохранены в переменной, но на этот раз функция «выбросить» не будет работать по какой-то причине.

Так что мой вопрос был, будет ли работать больше одного раза (после того, как функция вернет данные), даже если я не обновлю страницу?

...