軟件簡介
Workerman 是一個高性能的 PHP socket 服務器框架,workerman 基于 PHP 多進程以及 libevent 事件輪詢庫,PHP 開發者只要實現一兩個接口,便可以開發出自己的網絡應用,例如 Rpc 服務、聊天室服務器、游戲服務器等。
Workerman 的目標是讓 PHP 開發者更容易的開發出基于 socket 的高性能的應用服務,而不用去了解 PHP socket 以及 PHP 多進程細節。 workerman 本身是一個 PHP 多進程服務器框架,具有 PHP 進程管理以及 socket 通信的模塊,所以不依賴 php-fpm、nginx 或者 apache 等這些容器便可以獨立運行。
特性
- 使用 PHP 開發
- 支持 PHP 多進程
- 支持 TCP/UDP
- 接口上支持各種應用層協議
- 支持 libevent 事件輪詢庫,支持高并發
- 支持服務平滑重啟
- 支持 PHP 文件更新檢測及自動加載
- 支持 PHP 長連接
- 支持以指定用戶運行子進程
- 支持 telnet 遠程控制
- 高性能
基于 workerman 已經有很多的網絡應用程序
示例代碼:
<?php
use Workerman\Worker;
require_once './Workerman/Autoloader.php';
// 創建一個Worker監聽2346端口,使用websocket協議通訊
$ws_worker = new Worker("websocket://0.0.0.0:2346");
// 啟動4個進程對外提供服務
$ws_worker->count = 4;
// 當收到客戶端發來的數據后返回hello $data給客戶端
$ws_worker->onMessage = function($connection, $data)
{
// 向客戶端發送hello $data
$connection->send('hello ' . $data);
};
// 運行
Worker::runAll();
性能壓力測試
測試環境:
系統:ubuntu 12.04 LTS 64位
內存:8G
cpu:Intel? Core? i3-3220 CPU @ 3.30GHz × 4
業務邏輯:
hello world
結果:
短鏈接(每次請求完成后關閉鏈接,下次請求建立新的鏈接):
條件: 壓測腳本開500個線程,每個線程鏈接Workerman 10W次,每次鏈接發送1個請求
結果: 吞吐量:3W/S , cpu:60% , 內存占用:4*8M = 32M
長鏈接(每次請求后不關閉鏈接,下次請求繼續復用這個鏈接):
條件: 壓測腳本開1000個線程,每個線程鏈接Workerman 1次,每個鏈接發送10W請求
結果: 吞吐量:13W/S , cpu:68% , 內存占用:4*8M = 32M
無流量抖動,無內存泄漏,性能非常強悍
workerman 啟動界面:
workerman 狀態查看界面: