Хостинг флеш-приложения на торнадо, но он не масштабирует количество запросов [дубликат]

Это одно из мест, с помощью которого привязка данных, используемая во многих новых фреймворках JavaScript, будет очень полезна для вас ...

Итак, если вы используете Angular, React или любые другие фреймворки, которые делают два способа связывания данных, эта проблема просто исправлена ​​для вас, поэтому простым языком ваш результат undefined на первом этапе, поэтому вы получили result = undefined до получения данных, а затем, как только вы получите результат , он будет обновляться и присваиваться новому значению, которое отвечает на ваш вызов Ajax ...

Но как вы можете сделать это в чистом javascript или jQuery, например, как вы задали этот вопрос?

Вы можете использовать обратный вызов, обещание и недавно наблюдаемое, чтобы обрабатывать его для вас, например, в обещаниях мы имеем некоторые функции, такие как success () или then (), которые будут выполняться, когда ваши данные будут готовы для вас, с функцией обратного вызова или подписки на наблюдаемые.

Например, в вашем случае, в котором вы используете jQuery, вы можете сделать что-то вроде этого:

$(document).ready(function(){
    function foo() {
        $.ajax({url: "api/data", success: function(data){
            fooDone(data); //after we have data, we pass it to fooDone
        }});
    };

    function fooDone(data) {
        console.log(data); //fooDone has the data and console.log it
    };

    foo(); //call happens here
});

Для получения дополнительной информации n изучение обещаний и наблюдаемых, которые являются новыми способами для создания асинхронных материалов.

3
задан davidism 1 June 2015 в 00:14
поделиться

1 ответ

Документы Flask, используемые для описания того, как это сделать, но были удалены из-за заметок производительности ниже. Вам не нужен Tornado для обслуживания вашего приложения Flask, если весь ваш асинхронный код уже не написан в Tornado.

В этом документе также описаны торнадо о WSGI . Они также содержат большое предупреждение о том, что это, вероятно, менее эффективно, чем использование выделенного сервера приложений WSGI, такого как uWSGI, Gunicorn или mod_wsgi.

WSGI - это синхронный интерфейс , в то время как модель параллелизма Tornado основана на однопоточном асинхронном выполнении. Это означает, что запуск WSGI-приложения с помощью WSGIContainer Tornado менее масштабируемый , чем запуск того же приложения на многопоточном WSGI-сервере, например gunicorn или uwsgi. Используйте WSGIContainer только тогда, когда есть преимущества для объединения Tornado и WSGI в том же процессе, что перевешивает уменьшенную масштабируемость.

Например, вместо использования Gunicorn:

gunicorn -w 4 app:app
< hr>

После всего этого, если вы действительно все еще хотите использовать Tornado, вы можете использовать шаблон, описанный в документах:

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from yourapplication import app

http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()
12
ответ дан davidism 26 August 2018 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: