我用来开发cloudgo的框架是echo,因为它是一种轻量级、简洁、文档详细的web框架。
echo官网:http://go-echo.org
echo下载地址:https://github.com/labstack/echo
echo最大的优点是它的性能,下面是echo和其他web框架的性能对比:
cloudgo程序
使用echo编写的cloudgo程序如下:
package main
import (
"net/http"
"github.com/labstack/echo"
)
func main() {
e := echo.New()
e.GET("/users/:name", func(c echo.Context) error { // 设置页面路由
name := c.Param("name") // 得到url参数
return c.String(http.StatusOK, "Welcome, "+name+"!")
})
e.Logger.Fatal(e.Start(":8888")) // 设置运行端口
}
可以看到,使用echo开发一个web程序非常简单,只需要寥寥数行代码。这个程序的功能是接收一个后缀为/users/username
的url并且返回一个带有username
的网页,终端运行程序:
并在浏览器上访问本地的8888端口,效果如图:
curl测试
使用curl工具对cloudgo进行测试,打开终端,输入:
$ curl -v http://localhost:8888/users/Peter
得到输出如下:
可以看到一些请求和相应信息。
ab压力测试
使用Ubuntu上的apache2-utils工具对cloudgo进行压力测试。在终端输入:
ab -n 1000 -c 100 http://localhost:8888/users/Peter
表示对网页发起1000轮请求,每轮请求为并发的100次请求。
输出结果如下:
其中重要参数的含义如下:
-
Document Path:请求的资源,这里为
/Users/Peter
-
Document Lenght:文档返回的长度,不包括相应头部,这里为15字节
-
Concurrency Level:并发个数,这里为
1
-
Complete requests:总请求数,这里为
1
-
Failed requests:失败请求数,这里为
1
-
Requests per second:平均每秒请求数,这里为
1655.67个/s
-
Time per request:平均每个请求消耗的时间(单位
ms
),这里为0.604ms
-
Time per request:平均每个请求消耗的时间/请求并发数(单位:ms),这里为
0.504ms
,因为并发个数为1
-
Transfer rate:传输速率(单位
KB/s
),这里为213.43KB/s
-
Percentage of the requests served within a certain time (ms)
格式:百分数+数字,比如
90% 1
表示1ms
内完成了90%
的请求