根據目前的項目要求,須要找一個合適的框架作api/rpc服務,之前作web項目選型的ci框架,經測試發現使用web框架作api/rpc並不實際;緣由是,框架中調用了不少的model,其實在api/RPC中並不真正須要,加載的model一多並且很影響性能; 原本作PHP開發的,想從php中選型一個好的socket框架的程序來實現。後來查找資料發現php中確實存在這種框架:swoole,workman ,兩個框架都進行了下載和測試,發現仍是workerman 文檔,案例,測試工具和代碼規範度等都比較齊全,並且性能比較優越,有圖表分析功能,加載框架能跑到1w以上的併發每秒。 後有同事建議採用nodejs 說nodejs性能高,開始對nodejs測試了下作了下對比,剛開始使用nodejs單進程跑helloword,能跑到5000每秒,後以爲性能應該不止這樣後代碼進行調整成使用多進程方式,併發提高了一杯 ,這裏要說明下,我採用的測試服務器爲雙核服務器php
nodejs 測試代碼:node
var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length;web
if (cluster.isMaster) { console.log("master start...");api
// Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('listening',function(worker,address){ console.log('listening: worker ' + worker.process.pid +', Address: '+address.address+":"+address.port); }); cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); });
} else { http.createServer(function(req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(0);服務器
} ~ ~swoole
~併發
如下是測試結果: [root@localhost ~]# webbench -c 1000 -t 30 http://xxx.xx.xx.xxx:44354/ Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.框架
Benchmarking: GET http://xxx.xx.xx.xxx:44354/ 1000 clients, running 30 sec.socket
Speed=666260 pages/min, 966068 bytes/sec. Requests: 333130 susceed, 0 failed.工具
值得注意的是: 服務器的計算能力和cpu的核心有關,我提高進程的個數,其實沒有達到什麼做用,併發一直保持 66w 每分鐘左右
workerman 我一樣進行壓測:
[root@localhost ~]# webbench -c 1000 -t 30 http://xxx.xx.xx.xxx:2015/ Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://xxx.xx.xx.xxx:2015/ 1000 clients, running 30 sec. Speed=675500 pages/min, 1640655 bytes/sec. Requests: 337750 susceed, 0 failed.
能夠看出,在性能差很少,在直接拋出helloword的狀況下。固然以上測是是對框架進行測試並無實際對程序代碼性能進行測試。
不過能夠看出一點,若是你在使用php開發workerman框架,是一個不錯的選擇,固然nodejs也不差,畢竟不少大型企業都開始使用。