Bladeren bron

workerman目录改动

walkor 11 jaren geleden
bovenliggende
commit
b72e1fe8e8

+ 0 - 149
README.md

@@ -1,149 +0,0 @@
-workerman
-=========
-
-workerman 是一个高性能的PHP socket服务框架,开发者可以在这个框架下开发各种网络应用,例如Rpc服务、聊天室、游戏等。
-workerman 具有以下特性
- * 多进程
- * 支持TCP/UDP
- * 支持各种应用层协议
- * 使用libevent事件轮询库,支持高并发
- * 支持文件更新检测及自动加载
- * 支持服务平滑重启
- * 支持telnet远程控制及监控
- * 支持异常监控及告警
- * 支持长连接
- * 支持以指定用户运行worker进程
-
- [更多请访问www.workerman.net](http://www.workerman.net/workerman)
-
-所需环境
-========
-
-workerman需要PHP版本不低于5.3,只需要安装PHP的Cli即可,无需安装PHP-FPM、nginx、apache
-workerman不能运行在Window平台
-
-安装
-=========
-
-以ubuntu为例
-
-安装PHP Cli  
-`sudo apt-get install php5-cli`
-
-强烈建议安装libevent扩展,以便支持更高的并发量  
-`sudo pecl install libevent`
-
-建议安装proctitle扩展(php5.5及以上版本原生支持,无需安装),以便方便查看进程信息  
-`sudo pecl install proctitle`
-
-
-启动停止
-=========
-
-以ubuntu为例
-
-启动  
-`sudo ./bin/workermand start`
-
-重启启动  
-`sudo ./bin/workermand restart`
-
-平滑重启/重新加载配置  
-`sudo ./bin/workermand reload`
-
-查看服务状态  
-`sudo ./bin/workermand status`
-
-停止  
-`sudo ./bin/workermand stop`
-
-
-配置
-========
-
- * 配置文件在workerman/conf/目录下  
- * 其中workerman/conf/workerman.conf是workerman的主体配置文件,在里面可以设置运行模式、日志目录、pid文件存储位置等配置  
- * workerman/conf/conf.d/下每个配置文件对应一个网络应用,同时也对应workerman\workers下的一组worker进程。
- * 以Rpc网络服务应用的配置文件workerman/conf/conf.d/RpcWorker.conf为例
-
-```
-;Rpc网络服务应用配置
-;所用的传输层协议及绑定的ip端口
-listen = tcp://0.0.0.0:2015
-;长连接还是短连接,Rpc服务这里设置成短连接,每次请求后服务器主动断开
-persistent_connection = 0
-;启动多少worker进程,这里建议设置成cpu核数的整数倍,例如 CPU数*3
-start_workers=12
-;接收多少请求后退出该进程,重新启动一个新进程,设置成0代表永不重启
-max_requests=1000
-;以哪个用户运行该worker进程,建议使用权限较低的用户运行worker进程,例如www-data
-user=www-data
-;socket有数据可读的时候预读长度,一般设置为应用层协议包头的长度,这里设置成尽可能读取更多的数据
-preread_length=84000
-```
-
-telnet远程控制及监控
-====================
-
-###workerman通过workerman/workers/Monitor.php提供telnet远程控制及监控功能
-<pre>
-输入
-telnet xxx.xxx.xxx.xxx 2001
-输入
-status
-展示workerman状态
-status
----------------------------------------GLOBAL STATUS--------------------------------------------
-WorkerMan version:2.0.1
-start time:2013-12-26 22:12:48   run 0 days 0 hours
-load average: 0, 0, 0
-1 users          4 workers       15 processes
-worker_name    exit_status     exit_count
-FileMonitor    0                0
-Monitor        0                0
-RpcWorker      0                0
-WorkerManAdmin 0                0
----------------------------------------PROCESS STATUS-------------------------------------------
-pid     memory      listening        timestamp  worker_name    total_request packet_err thunder_herd client_close send_fail throw_exception suc/total
-24139   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
-24140   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
-24141   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
-24142   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
-24143   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
-24144   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
-24145   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
-24146   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
-24147   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
-24148   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
-24149   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
-24150   1.25M   tcp://0.0.0.0:2015   1388067168 RpcWorker      0              0          0            0            0         0               100%
-24151   1.25M   tcp://0.0.0.0:3000   1388067168 WorkerManAdmin 0              0          0            0            0         0               100%
-</pre>
-
-###telnet支持的命令
- * status
- * stop
- * reload
- * kill pid
- * quit
- 
-性能测试
-=============
-
-###测试环境:
-系统:ubuntu 12.04 LTS 64位  
-内存:8G  
-cpu:Intel® Core™ i3-3220 CPU @ 3.30GHz × 4  
-
-###结果
-
-    Workerman开启4个worker进程(worker进程业务逻辑只是将收到的包写回客户端)
-
-    短链接(每次请求完成后关闭链接,下次请求建立新的链接):
-        条件: 压测脚本开500个线程,每个线程链接Workerman 10W次,每次链接发送1个请求
-        结果: 吞吐量:3W/S , cpu:60% , 内存占用:4*8M = 32M
-
-    长链接(每次请求后不关闭链接,下次请求继续复用这个链接):
-        条件: 压测脚本开1000个线程,每个线程链接Workerman 1次,每个链接发送10W请求
-        结果: 吞吐量:9.7W/S , cpu:68% , 内存占用:4*8M = 32M
-

+ 1 - 1
workers/FileReceiverDemo.php → applications/FileReceiverDemo/FileReceiverDemo.php

@@ -1,5 +1,5 @@
 <?php 
-require_once WORKERMAN_ROOT_DIR . 'man/Core/SocketWorker.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/SocketWorker.php';
 /**
  * 二进制协议,接收文件demo
  * @author walkor <worker-man@qq.com>

+ 0 - 18
conf/conf.d/FileReceiverDemo.conf

@@ -1,18 +0,0 @@
-;监听ip及端口
-listen = tcp://0.0.0.0:2016
-;是否需要长连接 看自己应用场景
-persistent_connection = 1
-;启动多少进程
-start_workers=5
-;以哪个用户运行这个worker进程,需要root权限
-user=www-data
-;预读长度 unsigned int + unsigned char 共5字节
-preread_length=5
-
-;==以下是自定义的配置==
-;如果worker进程1分钟内退出max_worker_exit_count次则触发告警
-max_worker_exit_count=2000
-;每个worker进程最大内存阈值,超过这个值安全重启这个进程
-max_mem_limit=124000
-;telnet密码
-password=yourpassword

+ 1 - 1
workers/FileMonitor.php → workerman/Common/FileMonitor.php

@@ -1,5 +1,5 @@
 <?php 
-require_once WORKERMAN_ROOT_DIR . 'man/Core/SocketWorker.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/SocketWorker.php';
 /**
  * 
  * 用这个worker监控文件更新

+ 1 - 1
workers/Monitor.php → workerman/Common/Monitor.php

@@ -1,5 +1,5 @@
 <?php 
-require_once WORKERMAN_ROOT_DIR . 'man/Core/SocketWorker.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/SocketWorker.php';
 /**
  * 
  * 1、提供telnet接口,远程控制服务器查看服务状态

+ 1 - 1
applications/Common/Protocols/Http/Http.php → workerman/Common/Protocols/Http/Http.php

@@ -1,5 +1,5 @@
 <?php 
-namespace  App\Common\Protocols\Http;
+namespace  Man\Common\Protocols\Http;
 
 /**
  * 判断http协议的数据包是否完整

+ 0 - 0
applications/Common/Protocols/Http/mime.types → workerman/Common/Protocols/Http/mime.types


+ 2 - 2
workers/WebServer.php → workerman/Common/WebServer.php

@@ -1,6 +1,6 @@
 <?php
-require_once WORKERMAN_ROOT_DIR . 'man/Core/SocketWorker.php';
-require_once WORKERMAN_ROOT_DIR . 'applications/Common/Protocols/Http/Http.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/SocketWorker.php';
+require_once WORKERMAN_ROOT_DIR . 'Common/Protocols/Http/Http.php';
 
 /**
  * 

+ 1 - 1
man/Core/AbstractWorker.php → workerman/Core/AbstractWorker.php

@@ -1,6 +1,6 @@
 <?php 
 namespace Man\Core;
-require_once WORKERMAN_ROOT_DIR . 'man/Core/Events/Select.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/Events/Select.php';
 
 /**
  * 抽象Worker类

+ 1 - 1
man/Core/Events/Libevent.php → workerman/Core/Events/Libevent.php

@@ -1,6 +1,6 @@
 <?php 
 namespace Man\Core\Events;
-require_once WORKERMAN_ROOT_DIR . 'man/Core/Events/interfaces.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/Events/interfaces.php';
 /**
  * 
  * libevent事件轮询库的封装

+ 1 - 1
man/Core/Events/Select.php → workerman/Core/Events/Select.php

@@ -1,6 +1,6 @@
 <?php 
 namespace Man\Core\Events;
-require_once WORKERMAN_ROOT_DIR . 'man/Core/Events/interfaces.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/Events/interfaces.php';
 /**
  * 
  * select 轮询封装

+ 0 - 0
man/Core/Events/interfaces.php → workerman/Core/Events/interfaces.php


+ 3 - 2
man/Core/Lib/Checker.php → workerman/Core/Lib/Checker.php

@@ -192,8 +192,9 @@ class Checker
             }
             else
             {
-                $worker_file = WORKERMAN_ROOT_DIR . "workers/$worker_name.php";
-                $class_name = $worker_name;
+                \Man\Core\Master::notice("$worker_name not set worker_file in conf/conf.d/$worker_name.conf");
+                echo"\033[31;40m [not set worker_file] \033[0m\n";
+                continue;
             }
             if(0 != self::checkSyntaxError($worker_file, $class_name))
             {

+ 1 - 1
man/Core/Lib/Config.php → workerman/Core/Lib/Config.php

@@ -32,7 +32,7 @@ class Config
      */
     private function __construct()
      {
-        $config_file = WORKERMAN_ROOT_DIR . 'conf/workerman.conf';
+        $config_file = WORKERMAN_ROOT_DIR . '/conf/workerman.conf';
         if (!file_exists($config_file)) 
         {
             throw new \Exception('Configuration file "' . $config_file . '" not found');

+ 0 - 0
man/Core/Lib/Log.php → workerman/Core/Lib/Log.php


+ 0 - 0
man/Core/Lib/Mutex.php → workerman/Core/Lib/Mutex.php


+ 0 - 0
man/Core/Lib/Task.php → workerman/Core/Lib/Task.php


+ 6 - 6
man/Core/Master.php → workerman/Core/Master.php

@@ -6,11 +6,11 @@ if(!defined('WORKERMAN_ROOT_DIR'))
     define('WORKERMAN_ROOT_DIR', realpath(__DIR__."/../../")."/");
 }
 
-require_once WORKERMAN_ROOT_DIR . 'man/Core/Lib/Checker.php';
-require_once WORKERMAN_ROOT_DIR . 'man/Core/Lib/Config.php';
-require_once WORKERMAN_ROOT_DIR . 'man/Core/Lib/Task.php';
-require_once WORKERMAN_ROOT_DIR . 'man/Core/Lib/Log.php';
-require_once WORKERMAN_ROOT_DIR . 'man/Core/Lib/Mutex.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/Lib/Checker.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/Lib/Config.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/Lib/Task.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/Lib/Log.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/Lib/Mutex.php';
 
 /**
  * 
@@ -624,7 +624,7 @@ class Master
                     // 删除共享内存
                     self::removeShmAndQueue();
                     // 发送提示
-                    self::notice("Server stoped");
+                    self::notice("Workerman stoped");
                     // 删除pid文件
                     @unlink(WORKERMAN_PID_FILE);
                     exit(0);

+ 6 - 5
man/Core/SocketWorker.php → workerman/Core/SocketWorker.php

@@ -2,9 +2,9 @@
 namespace Man\Core;
 use Man\Core\Events\BaseEvent;
 
-require_once WORKERMAN_ROOT_DIR . 'man/Core/Events/Select.php';
-require_once WORKERMAN_ROOT_DIR . 'man/Core/AbstractWorker.php';
-require_once WORKERMAN_ROOT_DIR . 'man/Core/Lib/Config.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/Events/Select.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/AbstractWorker.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/Lib/Config.php';
 
 /**
  * SocketWorker 监听某个端口,对外提供网络服务的worker
@@ -275,7 +275,7 @@ abstract class SocketWorker extends AbstractWorker
     public function setEventLoopName($event_loop_name)
     {
         $this->eventLoopName = "\\Man\\Core\\Events\\".$event_loop_name;
-        require_once WORKERMAN_ROOT_DIR . 'man/Core/Events/'.ucfirst(str_replace('WORKERMAN', '', $event_loop_name)).'.php';
+        require_once WORKERMAN_ROOT_DIR . 'Core/Events/'.ucfirst(str_replace('WORKERMAN', '', $event_loop_name)).'.php';
     }
     
     /**
@@ -535,7 +535,7 @@ abstract class SocketWorker extends AbstractWorker
             {
                 return false;
             }
-            $this->event->add($this->connections[$this->currentDealFd],  Events\BaseEvent::EV_WRITE, array($this, 'tcpWriteToClient'), array($this->currentDealFd));
+            $this->event->add($this->connections[$this->currentDealFd],  Events\BaseEvent::EV_WRITE, array($this, 'tcpWriteToClient'));
             return null;
         }
         // udp 直接发送,要求数据包不能超过65515
@@ -549,6 +549,7 @@ abstract class SocketWorker extends AbstractWorker
      */
     public function tcpWriteToClient($fd)
     {
+        $fd = (int) $fd;
         if(empty($this->connections[$fd]))
         {
             $this->notice("tcpWriteToClient \$this->connections[$fd] is null");

+ 2 - 2
bin/workermand → workerman/bin/workermand

@@ -27,10 +27,10 @@ if (!version_compare(PHP_VERSION, '5.3.0', '>='))
     exit("Workerman PHP >= 5.3.0 required \n");
 }
 
-require_once WORKERMAN_ROOT_DIR . 'man/Core/Master.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/Master.php';
 
 // ==pid-file==
-require_once WORKERMAN_ROOT_DIR . 'man/Core/Lib/Config.php';
+require_once WORKERMAN_ROOT_DIR . 'Core/Lib/Config.php';
 Man\Core\Lib\Config::instance();
 if(!($pid_file = Man\Core\Lib\Config::get('workerman.pid_file')))
 {

+ 2 - 0
conf/conf.d/FileMonitor.conf → workerman/conf/conf.d/FileMonitor.conf

@@ -1,3 +1,5 @@
+;worker_file
+worker_file = Common/FileMonitor.php
 ;此worker进程不监听端口,主要用来监控文件更新,需要root权限
 ;listen=
 ;启动多少worker进程

+ 13 - 0
workerman/conf/conf.d/FileReceiverDemo.conf

@@ -0,0 +1,13 @@
+;worker_file
+worker_file = ../applications/FileReceiverDemo/FileReceiverDemo.php
+;监听ip及端口
+listen = tcp://0.0.0.0:2016
+;是否需要长连接 看自己应用场景
+persistent_connection = 1
+;启动多少进程
+start_workers=5
+;以哪个用户运行这个worker进程,应该用权限较低的用户
+user=root
+;预读长度 unsigned int + unsigned char 共5字节
+preread_length=5
+

+ 2 - 1
conf/conf.d/Monitor.conf → workerman/conf/conf.d/Monitor.conf

@@ -3,7 +3,8 @@
 ;②监控worker进程退出次数及状态,有异常时告警(告警发送邮件或者短信需要自己实现)
 ;③监控master进程是否异常退出
 ;④监控每个worker进程内存是否大于设定值,大于设定值则安全重启对应进程
-
+;worker_file
+worker_file = Common/Monitor.php
 ;监听ip及端口
 listen = tcp://127.0.0.1:2009
 ;telnet需要长连接

+ 1 - 1
conf/workerman.conf → workerman/conf/workerman.conf

@@ -5,4 +5,4 @@ pid_file=/var/run/workerman.pid
 ;日志文件目录
 log_dir=./logs/
 ;应用配置
-indlue=conf.d/*.conf
+indlue=/conf.d/*.conf