顯示廣告
隱藏 ✕
※ 本文為 dinos 轉寄自 ptt.cc 更新時間: 2013-06-03 18:11:07
看板 PHP
作者 rickysu (Ricky)
標題 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  (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  (mean)

硬體 Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz

就參考看看吧

另外 ZMQ 也是一個效能挺不錯的 lib,如果要同時對多個節點廣播時,效能也是
嚇死人。


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.136.115

--
※ 看板: dinos 文章推薦值: 0 目前人氣: 0 累積人氣: 337 
作者 rickysu 的最新發文:
  • +3 Re: [請益] 用迴圈跑出報名表 - PHP 板
    作者: 220.130.136.115 (台灣) 2013-08-16 09:28:04
    幫你把 Code 整理一下吧... 順便把一些壞習慣改掉 <?php //sql injection $str="select paperid,papername,paperman f …
    4F 3推
  • +2 [教學] OR || AND && 不能亂用 - PHP 板
    作者: 220.130.136.115 (台灣) 2013-07-18 10:46:53
    這篇算是亂入文 XD 回歸正題,在前幾篇的討論中有人使用到 And 這個 operator。 然而在 php 中 And 跟 && 是不同的東西,別混用了。 舉個範例 <?php …
    2F 2推
  • Re: [分享] PHP GC 機制 - PHP 板
    作者: 220.130.136.115 (台灣) 2013-06-04 09:32:44
    PHP 在判斷物件是否該被 GC 啟用了 reference counting 的機制來作為判斷。 簡單的說,當某個物件被參照時就把他的 refcount+1 。 例如 $a = new test() …
  • [分享] PHP GC 機制 - PHP 板
    作者: 220.130.136.115 (台灣) 2013-06-03 18:52:00
    題外話: 搞了好久終於註冊好 PTT 了。 ====================================== 前陣子看到某篇文章提到,要回收物件時, 使用 $obj = null 會馬上回 …
  • Re: [請益] 兩個 socket server 之間的溝通? - PHP 板
    作者: 220.130.136.115 (台灣) 2013-06-03 17:29:17
    要 keep 大量 connection,以及快速 response , 使用 socket 函數幾乎是不可行的方式。 傳統的 socket select,底層還是透過 polling 方式去監視 s …
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇