Я создаю веб-сервис, для которого я использую nodejs, phantomjs и expressjs. Я изучаю все три.Nodejs, expressjs - как обслуживать задержанный ответ
Я хочу выполнить отложенный ответ клиентам после обработки их запроса. Например,
Я обрабатываю определенные входы от моего клиента, тогда я хочу обработать данные на бэкэнд, который займет около 10 секунд на avg. Затем я хотел отправить эту страницу клиенту.
Возможно ли в узле отправлять несколько ответов на один и тот же запрос или отложенные ответы, чтобы шаблон автоматически обновлял содержимое.
Или, должен ли я использовать тот же метод, как хранить json в файле на сервере, а затем обслуживать страницу с помощью ajax, который будет запрашивать страницу.
, пожалуйста, помогите мне. Вот код, который я написал,
приложение-server.js (главный файл):
// import express module
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
// define all required template files to be served and also define the template engine
app.engine('.html', require('ejs').__express);
app.set('views', __dirname + '/views');
app.set('view engine', 'html');
// Useful modules
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
// import the routes
require('./router')(app);
app.listen(8080);
router.js:
var crypto = require('crypto');
var express = require('express');
module.exports = function (app) {
// define the static routes.
app.use('/static', express.static('./static'));
app.use('/media', express.static('./media'));
//defining the controller.
var parserlib = require('./controller.js')
// Define the home root path
app.get('/', function (req, res) {
// shows the home search page.
res.render('index', {content:'template success'});
});
app.get('/search', function(req, res){
res.redirect('/');
});
app.post('/search', parserlib.parserlib);
}
controller.js:
var crypto = require('crypto');
var path = require('path')
var childProcess = require('child_process')
exports.parserlib= function(req, res){
var output = '';
var url = req.body.search_url;
var childArgs = [
path.join(__dirname, 'external-script.js'),
url,
]
// execute the script in a separate thread.
childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) {
// handle results
console.log(stdout);
output = stdout;
//console.log(err);
//res.send(output);
});
//res.send(output);
};
Итак, что я хочу видеть, сначала отправьте ответ клиенту, указав, что его загрузка, а затем я хочу обновить обработанные данные. На других языках невозможно отправить несколько ответов. Не уверен в nodejs.
Кроме того, мне нужно сохранить выход json из обработанного lib в файл, а затем использовать ajax для запроса? или можно напрямую обновить json-объект клиенту?
Thanks
Позвольте мне проверить socket.io.Кажется, он может делать то, что я ожидаю. – Bala
@Paul > Это не так, как работает HTTP. Не могли бы вы указать на соответствующий spec/rfc для дальнейшего чтения? Заранее спасибо. –
@ManasJayanth https://www.w3.org/Protocols/rfc2616/rfc2616.html. в частности, обратите внимание на то, что язык указывает, что каждый запрос встречается с ответом. В приведенном выше вопросе спрашивается о нескольких ответах на запрос. В нем также говорится о задержке ответа, который, безусловно, возможен, но он рискует отключить таймауты и, следовательно, лучше обслуживается с помощью websockets или опроса. – Paul