avatar
@bangbang93

gin vs martini vs expressjs 压力测试

4/15/2015, 10:20:06 PM

这次重写手机选课项目可能会考虑使用go,于是又该挑web框架了,查了一番资料之后在gin和martini之间无法最终决定。于是跑一发压力测试和旧的expressjs框架做对比。

先贴一下三个框架使用的代码

var http = require('http');
var express = require('express');
var logger = require('morgan');

var app = express();
app.use(logger('dev'));

app.use('/', function(req, res) {
  res.send('Hello world!');
});

http.createServer(app).listen(3001)
package main

import (
    "github.com/go-martini/martini"
)

func main(){
    m := martini.Classic();
    m.Get("/", func () string {
        return "Hello, world!"
    })
    m.Run()
}
package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main(){
    app := gin.Default()
    app.GET("/", func (c *gin.Context){
        c.String(http.StatusOK, "hello, world");
    })
    app.Run(":3000");
}

压力端是ab

框架 并发 总计请求 Qps 平均时间(ms)
Gin 100 10000 2993.84 0.334
Martini 100 10000 2276.21 0.439
Express 100 10000 1300.82 0.769
Gin 500 10000 1576.21 0.634
Martini 500 10000 776.44 1.288
Express 500 10000 609.19 1.642
Gin 1000 10000 1531.32 0.653
Martini 1000 10000 800.18 1.250
Express 1000 10000 1608.332 1.608
Gin 2000 10000 1596.51 0.626
Martini 2000 10000 856.32 1.168
Express 2000 10000 617.67 1.619

1000并发express反超go,测试了好几次都是这个结果,有点不知道原因,而且node我也没有开cluster,因为还没深入研究gin和martini到底应该算多线程还是算单线程