Envoyer une requête http et recevoir des données push

Je veux que mon code Node.js envoie une requête http à un autre serveur. Cela fonctionne bien en utilisant le code ci-dessous. Mon problème est que le serveur en question devrait alors pousser des données, et la connexion est fermée juste après la demande.

Par exemple, si j’ouvre la page en utilisant mon navigateur, je reçois des données Push du serveur et ma page est actualisée par le navigateur. La question qui se pose est la suivante: comment puis-je obtenir les demandes push (de l’autre serveur) qui suivent ma demande http sur mon serveur de noeud? J’ai essayé de garder la connexion vivante en utilisant ” Keep-Alive “, mais cela ne change rien.

Exemple de code:

var http = require("http"); var agent = new http.Agent; var options = { hostname: 'server.com', port: 80, path: '/', method: 'GET', agent: agent, headers: { 'Connection':'keep-alive' } }; var req = http.request(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.ssortingngify(res.headers)); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); }); }); req.on('error', function(e) { console.log('problem with request: ' + e.message); }); // write data to request body req.write('data\n'); req.write('data\n'); req.end(); 

Votre question comporte une certaine ambiguïté sur la manière dont les mises à jour sont réellement réalisées dans le navigateur. Nous ne pouvons pas vous dire comment répliquer l’action du navigateur, sauf si vous nous indiquez l’action en cours.

HTTP est un protocole de requête / réponse, ce qui signifie que le serveur ne peut pas “pousser” le navigateur sans que le navigateur ouvre d’abord un lien vers le serveur (avec une requête).

Cela me semble que vous voulez créer un client personnalisé pour une page Web que vous ne possédez pas. Vous devez donc créer votre application pour qu’elle se comporte comme une page Web, car vous n’avez pas le contrôle sur la serveur qui sert la page. Est-ce exact?

(En passant, de nombreux sites Web ont des conditions d’utilisation qui interdisent le type d’utilisation que vous essayez de développer. Veuillez vérifier que vous êtes à la limite de votre application.)

Si tel est le cas, vous devez déterminer comment le navigateur se connecte au serveur une fois la page chargée. Cela peut se produire de plusieurs manières:

1) La page charge du code javascript qui effectue périodiquement une nouvelle demande AJAX sur une timer. Si c’est ce qui se passe, vous avez de la chance. Il vous suffit de capturer la structure de cette requête AJAX, puis de créer une nouvelle requête HTTP dans votre application avec le même minuteur.

2) La page ouvre un WebSocket sur le serveur et ce socket accepte les données entrantes du serveur. C’est un peu moins simple, mais de nombreuses bibliothèques (socket.io me viennent à l’esprit) pour établir ce type de connexion.

En tant que problème distinct, pour l’une ou l’autre de ces méthodes, le site peut transmettre des informations d’identification au navigateur afin qu’il repasse et établisse ces connexions avec succès. Dans ce cas, vous devrez pouvoir récupérer ces informations d’identification et les utiliser.

Les données du serveur sont au bloc

 res.on('data', function (chunk) { 

HTTP a été pensé pour envoyer des données et une connexion étroite. Si vous exécutez server.com, vous pouvez réécrire votre application pour maintenir la connexion ouverte (comme un socket normal). Mais comme d’autres l’ont suggéré, je pense que vous pourriez utiliser d’autres technologies telles que les sockets Web ou les longues interrogations.