作者rickysu (Ricky)
看板PHP
标题Re: [请益] 两个 socket server 之间的沟通?
时间Mon Jun 3 17:29:17 2013
要 keep 大量 connection,以及快速 response ,
使用 socket 函数几乎是不可行的方式。
传统的 socket select,底层还是透过 polling 方式去监视 socket 状态。
一旦连线数多的时候,效能就直直落。
目前比较有效率的作法是透过 linux 本身的 epoll 或是 freebsd 的 kqueue,
当然也有善心人士封装成 libevent 可供使用。
php本身也有善心人士将 libevent 打包成 extension。
http://pecl.php.net/package/libevent
http://pecl.php.net/package/event
pecl libevent 的 bug 还颇多,倒是 pecl event 实作的还挺不错的。
效能更是吓吓叫,前阵子实际测试的结果,node.js几乎是被打假的。
以下是一个简单的 http server
<?php
$base = new EventBase();
$http = new EventHttp($base);
$http->bind('127.0.0.1', 8080);
$http->setDefaultCallback(function($req) {
$buffer = $req->getOutputBuffer();
$buffer->add("hello world");
$req->sendReply(200,"ok", $buffer);
});
$base->dispatch();
实际用 ab -c 1000 -n 1000
http://localhost:8080/
pecl event Requests per second: 17247.92 [#/sec] (mean)
使用 nodejs
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end("hello world");
}).listen(8080);
nodejs Requests per second: 3711.91 [#/sec] (mean)
硬体 Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz
就参考看看吧
另外 ZMQ 也是一个效能挺不错的 lib,如果要同时对多个节点广播时,效能也是
吓死人。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.130.136.115
1F:推 olctw: 推 :) 06/03 18:57