http_server_test.php 代碼
use Workerman\Worker;
require_once __DIR__ . '/Autoloader.php';
// Worker::$daemonize = true;
// 創(chuàng)建一個Worker監(jiān)聽2345端口,使用http協(xié)議通訊
$http_worker2 = new Worker("http://0.0.0.0:2346");
$http_worker2->name='25k_step2222';
$http_worker2->user='root';
$http_worker2->count = 3;
$http_worker2->onMessage = function($connection, $data)
{
// 向瀏覽器發(fā)送hello world
$connection->send('hello world from worker2');
};
// 啟動4個進程對外提供服務
$http_worker1 = new Worker("http://0.0.0.0:2345");
$http_worker1->count = 5;
$http_worker1->name='25k_step1';
$http_worker1->user='www-data';
// 接收到瀏覽器發(fā)送的數據時回復hello world給瀏覽器
$http_worker1->onMessage = function($connection, $data)
{
// 向瀏覽器發(fā)送hello world
$connection->send('hello world from worker 1');
};
// 運行worker
Worker::runAll();
非deamon模式,PHP 7.0.18-0ubuntu0.16.04.1 (cli) ( NTS )
以下為自己打印的日志
oot@ubuntu:/home/tb/wwwshare/Workerman-master# php http_test.php start
init 也走一次
狀態(tài)收集文件在/tmp/_home_tb_wwwshare_Workerman-master_http_test.php.status
日志文件在/home/tb/wwwshare/Workerman-master/../workerman.log
pid文件在=/home/tb/wwwshare/Workerman-master/../_home_tb_wwwshare_Workerman-master_http_test.php.pid
當前pid1646
當前所有worker實例{"000000001f58c239000000000dddedce":{"id":0,"name":"25k_step2222","count":3,"user":"root","group":"","reloadable":true,"reusePort":false,"onWorkerStart":null,"onConnect":null,"onMessage":{},"onClose":null,"onError":null,"onBufferFull":null,"onBufferDrain":null,"onWorkerStop":null,"onWorkerReload":null,"transport":"tcp","connections":[],"protocol":null,"workerId":"000000001f58c239000000000dddedce"},"000000001f58c23b000000000dddedce":{"id":0,"name":"25k_step1","count":5,"user":"www-data","group":"","reloadable":true,"reusePort":false,"onWorkerStart":null,"onConnect":null,"onMessage":{},"onClose":null,"onError":null,"onBufferFull":null,"onBufferDrain":null,"onWorkerStop":null,"onWorkerReload":null,"transport":"tcp","connections":[],"protocol":null,"workerId":"000000001f58c23b000000000dddedce"}}
initd只走一次,不管new了多少個woker
timer_init pcntl_signal,— 為進程: 1646安裝一個sigalrm信號
pcntl_signal(SIGALRM 完畢
我啟動 Workerman start 用 DEBUG 模式
先獲取下進程pid1634
我啟動時沒有用了-d模式啟動,那這句話會輸出
沒有設置demoniz,直接返回2-1
workername: 25k_step2222 changelength: 12
socketname: http://0.0.0.0:2346 changemaxlength: 19
當前用戶id: 0 當前進程執(zhí)行用戶 {"name":"root","passwd":"x","uid":0,"gid":0,"gecos":"root","dir":"\/root","shell":"\/bin\/bash"}
人為設置的當前進程用戶: root
沒有reuseport,調用listen 在initWorkers
listen begin================================================listen begin
transport: tcp scheme: http address : //0.0.0.0:2346
當前scheme http不在{"tcp":"tcp","udp":"udp","unix":"unix","ssl":"tcp"}
那默認transport全都是:tcp
this的protocal設置為 :\Protocols\Http
\Protocols\Http這個類不存在,我需要再設置一下
this的protocal設置又被設置為 :\Workerman\Protocols\Http
所以到現(xiàn)在我的local_socket為: tcp://0.0.0.0:2346
PHP Warning: stream_socket_server(): unable to connect to tcp://0.0.0.0:2346 (Address already in use) in /home/tb/wwwshare/Workerman-master/Worker.php on line 2440
root@ubuntu:/home/tb/wwwshare/Workerman-master# netstat -anp |grep 2345
tcp 0 0 0.0.0.0:2345 0.0.0.0:* LISTEN 1635/0.0.0.0:2346
root@ubuntu:/home/tb/wwwshare/Workerman-master# netstat -anp |grep 2346
tcp 0 0 0.0.0.0:2345 0.0.0.0:* LISTEN 1635/0.0.0.0:2346
tcp 0 0 0.0.0.0:2346 0.0.0.0:* LISTEN 1635/0.0.0.0:2346
unix 3 STREAM CONNECTED 18804 1635/0.0.0.0:2346
unix 3 STREAM CONNECTED 18805 1635/0.0.0.0:2346
root@ubuntu:/home/tb/wwwshare/Workerman-master#
oot@ubuntu:/home/tb/wwwshare# kill 1635
root@ubuntu:/home/tb/wwwshare# 對進程1635發(fā)送了SIGTERM 信號(平滑 重啟)
已經看了手冊 :http://doc3.workerman.net/faq/workerman-start-fai
如果執(zhí)行了reload 或者restart 也不行,刪除pid文件也不行,killallphp 也不行 kill pid內的進程已經無效,關掉當前會話窗口也不行。。求教。。出現(xiàn)這個原因是啥?生產環(huán)境也有類似的問題。
最后解決辦法是用top,發(fā)現(xiàn)一個php占用內存達到70%以上,kill 掉之后,一切正常。