同步操作将从 stamhe/workerman 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
workerman 是一个高性能的PHP socket服务框架,开发者可以在这个框架下开发各种网络应用的服务端,例如移动通讯、手游服务端、网络游戏服务器、聊天室服务器、硬件通讯服务器、智能家居等 workerman 具有以下特性
更多请访问www.workerman.net
文档doc.workerman.net
可以开多个telnet窗口,窗口间可以实时聊天
小蝌蚪聊天室workerman-todpole
多人在线flappybird
workerman-chat聊天室
json-rpc
thrift-rpc
统计监控系统
<?php
class EchoService extends \Man\Core\SocketWorker
{
/**
* 判断telnet客户端发来的数据是否接收完整
*/
public function dealInput($recv_buffer)
{
// 根据协议,判断最后一个字符是不是回车 \n
if($recv_buffer[strlen($recv_buffer)-1] != "\n")
{
// 不是回车返回1告诉workerman我还需要再读一个字符
return 1;
}
// 告诉workerman数据完整了
return 0;
}
/**
* 处理业务逻辑,这里只是按照telnet客户端发来的命令返回对应的数据
*/
public function dealProcess($recv_buffer)
{
// 判断telnet客户端发来的是什么
$cmd = trim($recv_buffer);
switch($cmd)
{
// 获得服务器的日期
case 'date':
return $this->sendToClient(date('Y-m-d H:i:s')."\n");
// 获得服务器的负载
case 'load':
return $this->sendToClient(var_export(sys_getloadavg(), true)."\n");
case 'quit':
return $this->closeClient($this->currentDealFd);
default:
return $this->sendToClient("unknown cmd\n");
}
}
}
// 协议为 文本+回车
class Event
{
/**
* 网关有消息时,区分请求边界,分包
*/
public static function onGatewayMessage($buffer)
{
// 判断最后一个字符是否是回车("\n")
if($buffer[strlen($buffer)-1] === "\n")
{
return 0;
}
// 说明还有请求数据没收到,但是由于不知道还有多少数据没收到,所以只能返回1,因为有可能下一个字符就是回车("\n")
return 1;
}
/**
* 有消息时触发该方法
* @param int $client_id 发消息的client_id
* @param string $message 消息
* @return void
*/
public static function onMessage($client_id, $message)
{
// 获得客户端来发的消息具体内容,trim去掉了请求末尾的回车
$message_data = trim($message);
// ****如果没有$_SESSION['not_first_time']说明是第一次发消息****
if(empty($_SESSION['not_first_time']))
{
$_SESSION['not_first_time'] = true;
// 广播所有用户,xxx come
GateWay::sendToAll("client_id:$client_id come\n");
}
// 向所有人转发消息
return GateWay::sendToAll("client[$client_id] said :" . $message));
}
/**
* 当用户断开连接时触发的方法
* @param integer $client_id 断开连接的用户id
* @return void
*/
public static function onClose($client_id)
{
// 广播 xxx logout
GateWay::sendToAll("client[$client_id] logout\n");
}
}
###测试环境:
系统:debian 6.0 64位
内存:64G
cpu:Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz (2颗物理cpu,6核心,2线程)
Workerman:开启200个Benchark进程
压测脚本:benchmark
业务:发送并返回hello字符串
###普通PHP(版本5.3.10)压测 短链接(每次请求完成后关闭链接,下次请求建立新的链接): 条件: 压测脚本开500个并发线程模拟500个并发用户,每个线程链接Workerman 10W次,每次链接发送1个请求 结果: 吞吐量:1.9W/S , cpu利用率:32%
长链接(每次请求后不关闭链接,下次请求继续复用这个链接):
条件: 压测脚本开2000个并发线程模拟2000个并发用户,每个线程链接Workerman 1次,每个链接发送10W请求
结果: 吞吐量:36.7W/S , cpu利用率:69%
内存:每个进程内存稳定在6444K,无内存泄漏
###HHVM环境压测 短链接(每次请求完成后关闭链接,下次请求建立新的链接): 条件: 压测脚本开1000个并发线程模拟1000个并发用户,每个线程链接Workerman 10W次,每次链接发送1个请求 结果: 吞吐量:3.5W/S , cpu利用率:35%
长链接(每次请求后不关闭链接,下次请求继续复用这个链接):
条件: 压测脚本开6000个并发线程模拟6000个并发用户,每个线程链接Workerman 1次,每个链接发送10W请求
结果: 吞吐量:45W/S , cpu利用率:67%
内存:HHVM环境每个进程内存稳定在46M,无内存泄漏
======= #workerman
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。