2017-05-01 2 views
0

Par exemple, nous avons ce code simple:Devrais-je utiliser `Express` et` Socket.IO` séparément?

var http = require('http'); 
var express = require('express'); 
var app = express(); 

var server = http.createServer(app); 
var io = require('socket.io').listen(server); 

server.listen(80); 

Lorsque / est chargé et le bouton start pressé par socket.io demande envoyée qui commence des choses lourdes back-end (beaucoup de différentes requêtes http qui pourrait être de 5 à 10 sec) et quand la réponse arrive, elle est immédiatement renvoyée au navigateur. Donc, la question principale: devrais-je diviser l'application en deux parties?

  1. back-end avec Socket.IO comme un processus
  2. frontal avec Express comme second processus

Je suis conscient du fait que lorsque les longues demandes se fait-il bloquera Express. Par exemple, lorsqu'un utilisateur effectue une recherche sur un autre site, celui-ci est arrêté alors que de longues requêtes sont en cours.

Répondre

0

Il n'y a qu'une réponse définitive à propos des processus un contre deux en comprenant parfaitement et probablement en établissant un profil/testant votre code et vos clients. Si votre code node.js (qu'il s'agisse de requêtes HTTP régulières ou de requêtes socket.io) utilise correctement des E/S non bloquantes et ne nécessite pas beaucoup d'UC, vous pouvez traiter un nombre étonnamment élevé de demandes avec un seul processus. C'est un avantage majeur de l'architecture node.js.

Si, en revanche, vous avez des calculs gourmands en ressources processeur dans le cadre de la plupart des requêtes, vous pouvez en effet vouloir regrouper l'ensemble de votre application. Je vous recommande de mettre en cluster en divisant socket.io de http car cela vous donne plusieurs processeurs pour travailler sur vos requêtes socket.io ou vos requêtes http.