我正在尝试对 Go、Node.js 和 Python-Flask(使用 Tornado)进行基准测试。
我一直在为每台服务器运行以下内容(每台服务器多次):
ab -c 500 -n 100000 http://127.0.0.1:5000
Node 和 Python 处理负载很好,但 Go 抱怨:
apr_socket_recv: Connection reset by peer (104)
这是我的 Node.js 代码:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(5000, '127.0.0.1');
console.log('Server running at http://127.0.0.1:5000/');
这是我的 Python 代码:
import flask
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
app = flask.Flask(__name__)
@app.route("/")
def index():
return "Hello, world."
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()
这是我的 Go 服务器:
package main
import (
"fmt"
"net/http"
)
func serve(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, world.")
}
func main() {
http.HandleFunc("/", serve)
http.ListenAndServe(":5000", nil)
}
我的 Go 源代码是否正确/最优?我想给 Go 一个比“DNF”更好的分数……Go 在压力下怎么比 Python 更不可靠?在服务器关闭之前,我只能完成 77% 的请求。