104 votes

Pourquoi devrais-je utiliser Restify?

J'ai eu l'obligation de construire une API REST en node.js et était à la recherche pour plus de lumière-poids cadre de express.js ce qui, probablement, évite les fonctionnalités indésirables et agirait comme un custom-built-cadre pour la construction des Api REST. Restify de son intro est recommandé pour la même affaire.

La lecture de Pourquoi utiliser restify et de ne pas s'exprimer? semblait restify est un bon choix.

Mais la surprise est venue quand j'ai essayé les deux avec une charge.

J'ai fait un échantillon d'API REST sur Restify et inondé avec 1000 requêtes par seconde. Surprise pour moi, la route a commencé ne répond pas après un certain temps. La même application construite sur express.js occupé de tout.

Je suis actuellement en application de la charge à l'API via

var FnPush = setInterval(function() {           
    for(i=0;i<1000;i++) 
        SendMsg(makeMsg(i));                
}, 1000);

function SendMsg(msg) {
    var post_data = querystring.stringify(msg);
    var post_options = {
        host: target.host,
        port: target.port,
        path: target.path,
        agent: false,
        method: 'POST',
        headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
                'Content-Length': post_data.length,
                "connection": "close"
            }
    };

    var post_req = http.request(post_options, function(res) {});
    post_req.write(post_data);  
    post_req.on('error', function(e) {          
    }); 
    post_req.end();
}

N'des résultats que j'ai obtenu sembler de bon sens? Et si oui, est-express plus efficace que restify dans ce scénario? Ou est-il une erreur dans la façon dont je les ai testés?

mis à jour en réponse aux commentaires

le comportement de restify

  1. lorsque nourris avec un chargement de plus de 1000 req.s il arrêté le traitement en 1 sec recevoir jusqu'à 1015 req.s et puis ne rien faire. c'est à dire. le compteur j'ai mis en place pour le comptage des demandes entrantes arrêté incrément après 1015.

  2. lorsque nourris avec une charge de 100 reqs. par seconde, il a reçu jusqu'à 1015 et disparu non sensible par la suite.

73voto

Tarek Salah Points 1562

Dans ce blog il y a une comparaison entre PerfectAPI et Express.js et Restify.js et le résultat a été que l'Express a été mieux que Restify pour un grand nombre de requêtes, donc j'ai fait un simple test à l'aide de la version actuelle d'Exprimer et de Restify

Voici le code pour test express -

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

app.get('/hello/:name', function(req, res){
  res.send('hello ' + req.params.name);
});

app.listen(3000);
console.log('Listening on port 3000');

et voici le code pour restify

var restify = require('restify');
var server = restify.createServer();

function respond(req, res, next) {
    res.send('hello ' + req.params.name);
}

server.get('/hello/:name', respond);
server.listen(3000, function() {
    console.log('Listening on port 3000');
});

J'ai utilisé ApacheBench pour le test et c'est un exemple simple de l'utiliser

Tout simplement, Vous pouvez l'installer simplement à l'aide de cette commande sudo apt-get install apache2-utils ensuite, vous pouvez exécuter cette commande pour tester l' ab -n 10000 -c 100 http://127.0.0.1:3000/. Il suffit d'appuyer sur le serveur avec 10000 demandes, avec une simultanéité de 100

et ce sont les résultats

Pour Restify

Server Hostname:        127.0.0.1
Server Port:            3000

Document Path:          /hello/mark
Document Length:        12 bytes

Concurrency Level:      100
Time taken for tests:   2.443 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1390000 bytes
HTML transferred:       120000 bytes
Requests per second:    4092.53 [#/sec] (mean)
Time per request:       24.435 [ms] (mean)
Time per request:       0.244 [ms] (mean, across all concurrent requests)
Transfer rate:          555.53 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.5      0       8
Processing:     5   24   4.5     23      40
Waiting:        5   24   4.5     23      40
Total:         12   24   4.5     23      40

et pour Exprimer

Server Hostname:        127.0.0.1
Server Port:            3000

Document Path:          /hello/mark
Document Length:        10 bytes

Concurrency Level:      100
Time taken for tests:   2.254 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1890000 bytes
HTML transferred:       100000 bytes
Requests per second:    4436.76 [#/sec] (mean)
Time per request:       22.539 [ms] (mean)
Time per request:       0.225 [ms] (mean, across all concurrent requests)
Transfer rate:          818.89 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.5      0       7
Processing:    17   22   4.7     21      55
Waiting:       16   22   4.7     21      55
Total:         18   22   4.9     21      58

De la comparaison, vous pouvez voir que l'express est plus rapide que restify mais restify ne bloquez pas et la réponse à toutes les demandes.

Quelqu'un peut essayer de référence et vous pouvez changer le nombre de demandes et le nombre de demandes simultanées pour voir l'effet sur les deux.

11voto

Eric Elliott Points 948

Selon le Nœud Ko description:

restify est un node.js module spécialement conçu pour créer des services web REST dans le Nœud. restify fait beaucoup de les problèmes difficiles de la construction d'un tel service, comme la gestion des versions, la gestion des erreurs et de la négociation de contenu plus facile. Il fournit également construit dans DTrace sondes que vous obtenez pour gratuit pour trouver rapidement où les performances de votre application se situent les problèmes. Enfin, il fournit un solide client API qui gère réessayer/interruption pour vous sur l'échec de la connexion, avec quelques autres subtilités.

Les problèmes de Performance et des bugs peuvent probablement être corrigé. Peut-être que la description sera une motivation suffisante.

5voto

craigwaterman Points 41

J'ai rencontré un problème similaire en comparant plusieurs frameworks sur OS X via ab. Certaines des piles sont mortes régulièrement après la 1000e demande environ.

J'ai considérablement dépassé la limite et le problème a disparu.

Vous pouvez vérifier que votre fichier maxfiles est bien avec ulimit (ou launchctl limit <OS X uniquement) et voir quel est le maximum.

J'espère que cela pourra aider.

3voto

kushvarma Points 11

j'ai été confondu avec express ou restify ou perfectAPI. même essayé de développement d'un module dans chacun d'eux. l'exigence principale était de faire un RESTapi. mais finalement express, testé mon auto à la demande par seconde fait sur tout le cadre, l'express a donné de meilleurs résultats que les autres. Si, dans certains cas restify surpasse express, mais expriment des coutures pour gagner la course. Je thumbs up pour l'express. Et oui je suis aussi tombée sur la locomotive js, certains framework MVC construire au-dessus de l'express. Si quelqu'un à la recherche pour compléter MVC application à l'aide de l'express et de jade, rendez-vous pour la locomotive.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X