youzan / zanphp Goto Github PK
View Code? Open in Web Editor NEWPHP开发面向C10K+的高并发SOA服务 和RPC服务首选框架
Home Page: http://zanphp.io/
License: MIT License
PHP开发面向C10K+的高并发SOA服务 和RPC服务首选框架
Home Page: http://zanphp.io/
License: MIT License
https://github.com/youzan/zan/blob/master/src/Foundation/Coroutine/Scheduler.php#L54
如果不在业务逻辑里写try catch 的话,有Exception时完全没有错误信息抛出来
看最后一次更新已经很久了
ZanPHP官方还在维护吗?
源码
namespace Kdt\Iron\Nova\Foundation\Traits;
trait StructSpecManager{
public function toStruct(array $dbMap,array $data){
foreach($dbMap as $dbField => $structField){
if(property_exists($this,$structField) && isset($data[$dbField])){
$this->$structField = $data[$dbField];
}
}
return $this;
}
}
虽然已经拥有数据填充方法,但是需要处理对应映射关系...
而平时开发过程大部分数据key=>value已经做好了映射关系
所以建议新增一个快捷数据填充方法
namespace Kdt\Iron\Nova\Foundation\Traits;
trait StructSpecManager{
public function toStruct(array $dbMap,array $data){
foreach($dbMap as $dbField => $structField){
if(property_exists($this,$structField) && isset($data[$dbField])){
$this->$structField = $data[$dbField];
}
}
return $this;
}
public static function fillData(array $data){
$self = new static();
foreach($data as $structField => $value){
if(property_exists($self,$structField) ){
$self->$structField = $value;
}
}
return $self;
}
}
这样的修改好处在于业务方快速创建struct对象.
例如
class NovaCall
{
//新建管理员
public function createAdmin(){
$data['admin_name'] = 'test';
$data['group_id'] = 1;
$adminDTO = AdminDTO::fillData($data);
$adminService = new AdminService();
$admin_id = $adminService->createAdmin($adminDTO);
yield $admin_id;
}
}
<?php
use Zan\Framework\Utilities\DesignPattern\Singleton;
class Foo
{
use Singleton;
}
class Bar extends Foo
{
}
// Fatal error: Uncaught Error: Cannot access property Bar::$_instance
Bar::instance();
https://github.com/youzan/zan/blob/master/src/Network/Tcp/Request.php#L183
这里写死了有没有问题? 如果要开启heartBeat, 服务名是不是必须是com.youzan.service.test
https://github.com/youzan/zan/blob/master/src/Foundation/Booting/InitializeEnv.php#L18
是否应该增加一个配置选项? 或者遵循php.ini的设置呢?
Network/Server/ServerBase.php 中writePid 被 return了:
protected function writePid($pid)
{
return;
$pidFilePath = $this->getPidFilePath();
if (false === file_put_contents($pidFilePath, $pid)) {
sys_error("write pid into $pidFilePath failed");
}
}
由于微服务可能用c++用go用java写,而且有的已经写成了thrift的,有的已经写成了http server的,现在我希望把nova-thrift替换成标准thrift怎么操作呢?另外我在zanphp里访问http server的话可以用tcp连接池么?
vagrant@homestead:/usr/local/src/zan/zan-extension$ sudo make
/bin/bash /usr/local/src/zan/zan-extension/libtool --mode=compile cc -I. -I/usr/local/src/zan/zan-extension -DPHP_ATOM_INC -I/usr/local/src/zan/zan-extension/include -I/usr/local/src/zan/zan-extension/main -I/usr/local/src/zan/zan-extension -I/usr/include/php/20160303 -I/usr/include/php/20160303/main -I/usr/include/php/20160303/TSRM -I/usr/include/php/20160303/Zend -I/usr/include/php/20160303/ext -I/usr/include/php/20160303/ext/date/lib -I/usr/local/src/zan/zan-extension/include -DHAVE_CONFIG_H -std=gnu99 -Wall -pthread -g -O2 -fstack-check -fbounds-check -fstack-protector -fstack-protector-all -fno-strict-aliasing -c /usr/local/src/zan/zan-extension/swoole.c -o swoole.lo
libtool: compile: cc -I. -I/usr/local/src/zan/zan-extension -DPHP_ATOM_INC -I/usr/local/src/zan/zan-extension/include -I/usr/local/src/zan/zan-extension/main -I/usr/local/src/zan/zan-extension -I/usr/include/php/20160303 -I/usr/include/php/20160303/main -I/usr/include/php/20160303/TSRM -I/usr/include/php/20160303/Zend -I/usr/include/php/20160303/ext -I/usr/include/php/20160303/ext/date/lib -I/usr/local/src/zan/zan-extension/include -DHAVE_CONFIG_H -std=gnu99 -Wall -pthread -g -O2 -fstack-check -fbounds-check -fstack-protector -fstack-protector-all -fno-strict-aliasing -c /usr/local/src/zan/zan-extension/swoole.c -fPIC -DPIC -o .libs/swoole.o
In file included from /usr/local/src/zan/zan-extension/swoole.c:20:0:
/usr/local/src/zan/zan-extension/php_swoole.h:140:2: error: #error "Enable sockets support, require sockets extension."
#error "Enable sockets support, require sockets extension."
^
Makefile:194: recipe for target 'swoole.lo' failed
make: *** [swoole.lo] Error 1
https://github.com/youzan/zan/blob/master/src/Foundation/Core/Debug.php#L33
文档上好像也没写,为啥不直接用配置文件里的debug
这样就不用写yield了
执行命令:
php ./bin/httpd
得到报错信息:
[2017-07-06 16:46:23 #] Running in online mode
[2017-07-06 16:46:23 #] server starting .....[0.0.0.0:8030]
[2017-07-06 16:46:23 #9959.0] WARNING swReactorThread_onPipeReceive: [Master] set worker idle.[work_id=0]
[2017-07-06 16:46:23 #9959.1] WARNING swReactorThread_onPipeReceive: [Master] set worker idle.[work_id=1]
[2017-07-06 16:46:23 $9960.0] WARNING swManager_check_exit_status: worker#0[pid#9967] abnormal exit, exited=0, status=0, wifsignaled=1, signal=11
[2017-07-06 16:46:23 #] worker error happening [workerId=0, workerPid=9967, exitCode=0, signalNo=11]...
[2017-07-06 16:46:23 #] worker *0 still has 0 requests in progress...
[2017-07-06 16:46:23 $9960.0] WARNING swManager_check_exit_status: worker#1[pid#9968] abnormal exit, exited=0, status=0, wifsignaled=1, signal=11
[2017-07-06 16:46:23 #9959.0] WARNING swReactorThread_onPipeReceive: [Master] set worker idle.[work_id=0]
[2017-07-06 16:46:23 #] worker error happening [workerId=1, workerPid=9968, exitCode=0, signalNo=11]...
[2017-07-06 16:46:23 #] worker *1 still has 0 requests in progress...
[2017-07-06 16:46:23 #9959.1] WARNING swReactorThread_onPipeReceive: [Master] set worker idle.[work_id=1]
[2017-07-06 16:46:23 $9960.0] WARNING swManager_check_exit_status: worker#1[pid#9970] abnormal exit, exited=0, status=0, wifsignaled=1, signal=11
[2017-07-06 16:46:23 #] worker error happening [workerId=1, workerPid=9970, exitCode=0, signalNo=11]...
[2017-07-06 16:46:23 #] worker *1 still has 0 requests in progress...
[2017-07-06 16:46:23 #9959.1] WARNING swReactorThread_onPipeReceive: [Master] set worker idle.[work_id=1]
[2017-07-06 16:46:23 $9960.0] WARNING swManager_check_exit_status: worker#0[pid#9969] abnormal exit, exited=0, status=0, wifsignaled=1, signal=11
[2017-07-06 16:46:23 #] worker error happening [workerId=0, workerPid=9969, exitCode=0, signalNo=11]...
[2017-07-06 16:46:23 #] worker *0 still has 0 requests in progress...
[2017-07-06 16:46:23 #9959.0] WARNING swReactorThread_onPipeReceive: [Master] set worker idle.[work_id=0]
[2017-07-06 16:46:23 $9960.0] WARNING swManager_check_exit_status: worker#1[pid#9971] abnormal exit, exited=0, status=0, wifsignaled=1, signal=11
[2017-07-06 16:46:23 #] worker error happening [workerId=1, workerPid=9971, exitCode=0, signalNo=11]...
[2017-07-06 16:46:23 #] worker *1 still has 0 requests in progress...
[2017-07-06 16:46:23 #9959.1] WARNING swReactorThread_onPipeReceive: [Master] set worker idle.[work_id=1]
[2017-07-06 16:46:23 $9960.0] WARNING swManager_check_exit_status: worker#0[pid#9972] abnormal exit, exited=0, status=0, wifsignaled=1, signal=11
[2017-07-06 16:46:23 #] worker error happening [workerId=0, workerPid=9972, exitCode=0, signalNo=11]...
[2017-07-06 16:46:23 #] worker *0 still has 0 requests in progress...
[2017-07-06 16:46:23 #9959.0] WARNING swReactorThread_onPipeReceive: [Master] set worker idle.[work_id=0]
[2017-07-06 16:46:24 $9960.0] WARNING swManager_check_exit_status: worker#1[pid#9973] abnormal exit, exited=0, status=0, wifsignaled=1, signal=11
[2017-07-06 16:46:24 #] worker error happening [workerId=1, workerPid=9973, exitCode=0, signalNo=11]...
[2017-07-06 16:46:24 #] worker *1 still has 0 requests in progress...
[2017-07-06 16:46:24 #9959.1] WARNING swReactorThread_onPipeReceive: [Master] set worker idle.[work_id=1]
[2017-07-06 16:46:24 $9960.0] WARNING swManager_check_exit_status: worker#0[pid#9974] abnormal exit, exited=0, status=0, wifsignaled=1, signal=11
[2017-07-06 16:46:24 #] worker error happening [workerId=0, workerPid=9974, exitCode=0, signalNo=11]...
[2017-07-06 16:46:24 #] worker *0 still has 0 requests in progress...
[2017-07-06 16:46:24 #9959.0] WARNING swReactorThread_onPipeReceive: [Master] set worker idle.[work_id=0]
[2017-07-06 16:46:24 $9960.0] WARNING swManager_check_exit_status: worker#1[pid#9979] abnormal exit, exited=0, status=0, wifsignaled=1, signal=11
[2017-07-06 16:46:24 #] worker error happening [workerId=1, workerPid=9979, exitCode=0, signalNo=11]...
[2017-07-06 16:46:24 #] worker *1 still has 0 requests in progress...
[2017-07-06 16:46:24 #9959.1] WARNING swReactorThread_onPipeReceive: [Master] set worker idle.[work_id=1]
3.gdb php core分析
#0 0x0000000000000000 in ?? ()
#1 0x00007f7fa7afb4f8 in zim_swoole_client_connect (execute_data=0x7f7fb5e138c0, return_value=0x7fffc18a9540)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_client.c:1206
#2 0x000055d5b2c6839f in zend_call_function ()
#3 0x000055d5b2c68819 in call_user_function_ex ()
#4 0x00007f7fa7af237e in sw_call_user_function_ex (ymbol_table=0x0, no_separation=0, params=0x7fffc18a9550, param_count=3, retval_ptr_ptr=<synthetic pointer>, function_name=0x7fffc18a9530,
object_pp=<synthetic pointer>, function_table=0x0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/php7_wrapper.h:243
#5 tcpclient_connect (poolproper=<optimized out>, connClient=<optimized out>) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:576
#6 0x00007f7fa7af570d in createConnobj (pool=0x7f7fb5fb0840, proptr=0x7f7fb5f88880, con_obj=0x7f7fb5fde188)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:250
#7 0x00007f7fa7af5f0a in zim_swoole_connpool_createConnPool (execute_data=<optimized out>, return_value=0x7f7fb5e137b0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:1341
#8 0x000055d5b2cfc9e6 in ?? ()
#9 0x000055d5b2cb764b in execute_ex ()
#10 0x000055d5b2c68443 in zend_call_function ()
#11 0x000055d5b2c68819 in call_user_function_ex ()
#12 0x00007f7fa7ae9a86 in sw_call_user_function_ex (ymbol_table=0x0, no_separation=0, params=<synthetic pointer>, param_count=2, retval_ptr_ptr=<synthetic pointer>, function_name=<optimized out>,
object_pp=0x0, function_table=<optimized out>) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/php7_wrapper.h:243
#13 php_swoole_onWorkerStart (serv=0x55d5b466b0f0, worker_id=0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_server.c:770
#14 0x00007f7fa7b3d5f5 in swWorker_loop (factory=factory@entry=0x55d5b466b528, worker_id=worker_id@entry=0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Worker.c:488
#15 0x00007f7fa7b2fc81 in swManager_spawn_worker (factory=0x55d5b466b528, worker_id=0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:678
#16 0x00007f7fa7b30deb in swManager_loop_sync (factory=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:538
#17 swManager_start (factory=factory@entry=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:187
#18 0x00007f7fa7b2601a in swFactoryProcess_start (factory=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/factory/FactoryProcess.c:101
#19 0x00007f7fa7b389ad in swServer_start (serv=serv@entry=0x55d5b466b0f0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Server.c:542
#20 0x00007f7fa7b04ea7 in zim_swoole_http_server_start (execute_data=0x7f7fb5e121c0, return_value=0x7f7fb5e121b0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_http_server.c:1480
#21 0x000055d5b2cfc9e6 in ?? ()
#22 0x000055d5b2cb764b in execute_ex ()
#23 0x000055d5b2d0bb77 in zend_execute ()
#24 0x000055d5b2c771c3 in zend_execute_scripts ()
#25 0x000055d5b2c16c10 in php_execute_script ()
#26 0x000055d5b2d0d847 in ?? ()
#27 0x000055d5b2af7d54 in main ()
(gdb)
#0 0x0000000000000000 in ?? ()
#1 0x00007f7fa7afb4f8 in zim_swoole_client_connect (execute_data=0x7f7fb5e138c0, return_value=0x7fffc18a9540)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_client.c:1206
#2 0x000055d5b2c6839f in zend_call_function ()
#3 0x000055d5b2c68819 in call_user_function_ex ()
#4 0x00007f7fa7af237e in sw_call_user_function_ex (ymbol_table=0x0, no_separation=0, params=0x7fffc18a9550, param_count=3, retval_ptr_ptr=<synthetic pointer>, function_name=0x7fffc18a9530,
object_pp=<synthetic pointer>, function_table=0x0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/php7_wrapper.h:243
#5 tcpclient_connect (poolproper=<optimized out>, connClient=<optimized out>) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:576
#6 0x00007f7fa7af570d in createConnobj (pool=0x7f7fb5fb0840, proptr=0x7f7fb5f88880, con_obj=0x7f7fb5fde188)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:250
#7 0x00007f7fa7af5f0a in zim_swoole_connpool_createConnPool (execute_data=<optimized out>, return_value=0x7f7fb5e137b0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:1341
#8 0x000055d5b2cfc9e6 in ?? ()
#9 0x000055d5b2cb764b in execute_ex ()
#10 0x000055d5b2c68443 in zend_call_function ()
#11 0x000055d5b2c68819 in call_user_function_ex ()
#12 0x00007f7fa7ae9a86 in sw_call_user_function_ex (ymbol_table=0x0, no_separation=0, params=<synthetic pointer>, param_count=2, retval_ptr_ptr=<synthetic pointer>, function_name=<optimized out>,
object_pp=0x0, function_table=<optimized out>) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/php7_wrapper.h:243
#13 php_swoole_onWorkerStart (serv=0x55d5b466b0f0, worker_id=0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_server.c:770
#14 0x00007f7fa7b3d5f5 in swWorker_loop (factory=factory@entry=0x55d5b466b528, worker_id=worker_id@entry=0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Worker.c:488
#15 0x00007f7fa7b2fc81 in swManager_spawn_worker (factory=0x55d5b466b528, worker_id=0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:678
#16 0x00007f7fa7b30deb in swManager_loop_sync (factory=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:538
#17 swManager_start (factory=factory@entry=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:187
#18 0x00007f7fa7b2601a in swFactoryProcess_start (factory=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/factory/FactoryProcess.c:101
#19 0x00007f7fa7b389ad in swServer_start (serv=serv@entry=0x55d5b466b0f0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Server.c:542
#20 0x00007f7fa7b04ea7 in zim_swoole_http_server_start (execute_data=0x7f7fb5e121c0, return_value=0x7f7fb5e121b0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_http_server.c:1480
#21 0x000055d5b2cfc9e6 in ?? ()
#22 0x000055d5b2cb764b in execute_ex ()
#23 0x000055d5b2d0bb77 in zend_execute ()
#24 0x000055d5b2c771c3 in zend_execute_scripts ()
#25 0x000055d5b2c16c10 in php_execute_script ()
#26 0x000055d5b2d0d847 in ?? ()
#27 0x000055d5b2af7d54 in main ()
(gdb)
#0 0x0000000000000000 in ?? ()
#1 0x00007f7fa7afb4f8 in zim_swoole_client_connect (execute_data=0x7f7fb5e138c0, return_value=0x7fffc18a9540)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_client.c:1206
#2 0x000055d5b2c6839f in zend_call_function ()
#3 0x000055d5b2c68819 in call_user_function_ex ()
#4 0x00007f7fa7af237e in sw_call_user_function_ex (ymbol_table=0x0, no_separation=0, params=0x7fffc18a9550, param_count=3, retval_ptr_ptr=<synthetic pointer>, function_name=0x7fffc18a9530,
object_pp=<synthetic pointer>, function_table=0x0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/php7_wrapper.h:243
#5 tcpclient_connect (poolproper=<optimized out>, connClient=<optimized out>) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:576
#6 0x00007f7fa7af570d in createConnobj (pool=0x7f7fb5fb0840, proptr=0x7f7fb5f88880, con_obj=0x7f7fb5fde188)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:250
#7 0x00007f7fa7af5f0a in zim_swoole_connpool_createConnPool (execute_data=<optimized out>, return_value=0x7f7fb5e137b0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:1341
#8 0x000055d5b2cfc9e6 in ?? ()
#9 0x000055d5b2cb764b in execute_ex ()
#10 0x000055d5b2c68443 in zend_call_function ()
#11 0x000055d5b2c68819 in call_user_function_ex ()
#12 0x00007f7fa7ae9a86 in sw_call_user_function_ex (ymbol_table=0x0, no_separation=0, params=<synthetic pointer>, param_count=2, retval_ptr_ptr=<synthetic pointer>, function_name=<optimized out>,
object_pp=0x0, function_table=<optimized out>) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/php7_wrapper.h:243
#13 php_swoole_onWorkerStart (serv=0x55d5b466b0f0, worker_id=0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_server.c:770
#14 0x00007f7fa7b3d5f5 in swWorker_loop (factory=factory@entry=0x55d5b466b528, worker_id=worker_id@entry=0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Worker.c:488
#15 0x00007f7fa7b2fc81 in swManager_spawn_worker (factory=0x55d5b466b528, worker_id=0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:678
#16 0x00007f7fa7b30deb in swManager_loop_sync (factory=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:538
#17 swManager_start (factory=factory@entry=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:187
#18 0x00007f7fa7b2601a in swFactoryProcess_start (factory=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/factory/FactoryProcess.c:101
#19 0x00007f7fa7b389ad in swServer_start (serv=serv@entry=0x55d5b466b0f0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Server.c:542
#20 0x00007f7fa7b04ea7 in zim_swoole_http_server_start (execute_data=0x7f7fb5e121c0, return_value=0x7f7fb5e121b0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_http_server.c:1480
#21 0x000055d5b2cfc9e6 in ?? ()
#22 0x000055d5b2cb764b in execute_ex ()
#23 0x000055d5b2d0bb77 in zend_execute ()
#24 0x000055d5b2c771c3 in zend_execute_scripts ()
#25 0x000055d5b2c16c10 in php_execute_script ()
#26 0x000055d5b2d0d847 in ?? ()
#27 0x000055d5b2af7d54 in main ()
(gdb)
#0 0x0000000000000000 in ?? ()
#1 0x00007f7fa7afb4f8 in zim_swoole_client_connect (execute_data=0x7f7fb5e138c0, return_value=0x7fffc18a9540)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_client.c:1206
#2 0x000055d5b2c6839f in zend_call_function ()
#3 0x000055d5b2c68819 in call_user_function_ex ()
#4 0x00007f7fa7af237e in sw_call_user_function_ex (ymbol_table=0x0, no_separation=0, params=0x7fffc18a9550, param_count=3, retval_ptr_ptr=<synthetic pointer>, function_name=0x7fffc18a9530,
object_pp=<synthetic pointer>, function_table=0x0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/php7_wrapper.h:243
#5 tcpclient_connect (poolproper=<optimized out>, connClient=<optimized out>) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:576
#6 0x00007f7fa7af570d in createConnobj (pool=0x7f7fb5fb0840, proptr=0x7f7fb5f88880, con_obj=0x7f7fb5fde188)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:250
#7 0x00007f7fa7af5f0a in zim_swoole_connpool_createConnPool (execute_data=<optimized out>, return_value=0x7f7fb5e137b0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:1341
#8 0x000055d5b2cfc9e6 in ?? ()
#9 0x000055d5b2cb764b in execute_ex ()
#10 0x000055d5b2c68443 in zend_call_function ()
#11 0x000055d5b2c68819 in call_user_function_ex ()
#12 0x00007f7fa7ae9a86 in sw_call_user_function_ex (ymbol_table=0x0, no_separation=0, params=<synthetic pointer>, param_count=2, retval_ptr_ptr=<synthetic pointer>, function_name=<optimized out>,
object_pp=0x0, function_table=<optimized out>) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/php7_wrapper.h:243
#13 php_swoole_onWorkerStart (serv=0x55d5b466b0f0, worker_id=0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_server.c:770
#14 0x00007f7fa7b3d5f5 in swWorker_loop (factory=factory@entry=0x55d5b466b528, worker_id=worker_id@entry=0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Worker.c:488
#15 0x00007f7fa7b2fc81 in swManager_spawn_worker (factory=0x55d5b466b528, worker_id=0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:678
#16 0x00007f7fa7b30deb in swManager_loop_sync (factory=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:538
#17 swManager_start (factory=factory@entry=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:187
#18 0x00007f7fa7b2601a in swFactoryProcess_start (factory=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/factory/FactoryProcess.c:101
#19 0x00007f7fa7b389ad in swServer_start (serv=serv@entry=0x55d5b466b0f0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Server.c:542
#20 0x00007f7fa7b04ea7 in zim_swoole_http_server_start (execute_data=0x7f7fb5e121c0, return_value=0x7f7fb5e121b0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_http_server.c:1480
#21 0x000055d5b2cfc9e6 in ?? ()
#22 0x000055d5b2cb764b in execute_ex ()
#23 0x000055d5b2d0bb77 in zend_execute ()
#24 0x000055d5b2c771c3 in zend_execute_scripts ()
#25 0x000055d5b2c16c10 in php_execute_script ()
#26 0x000055d5b2d0d847 in ?? ()
#27 0x000055d5b2af7d54 in main ()
(gdb)
#0 0x0000000000000000 in ?? ()
#1 0x00007f7fa7afb4f8 in zim_swoole_client_connect (execute_data=0x7f7fb5e138c0, return_value=0x7fffc18a9540)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_client.c:1206
#2 0x000055d5b2c6839f in zend_call_function ()
#3 0x000055d5b2c68819 in call_user_function_ex ()
#4 0x00007f7fa7af237e in sw_call_user_function_ex (ymbol_table=0x0, no_separation=0, params=0x7fffc18a9550, param_count=3, retval_ptr_ptr=<synthetic pointer>, function_name=0x7fffc18a9530,
object_pp=<synthetic pointer>, function_table=0x0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/php7_wrapper.h:243
#5 tcpclient_connect (poolproper=<optimized out>, connClient=<optimized out>) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:576
#6 0x00007f7fa7af570d in createConnobj (pool=0x7f7fb5fb0840, proptr=0x7f7fb5f88880, con_obj=0x7f7fb5fde188)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:250
#7 0x00007f7fa7af5f0a in zim_swoole_connpool_createConnPool (execute_data=<optimized out>, return_value=0x7f7fb5e137b0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_connpool.c:1341
#8 0x000055d5b2cfc9e6 in ?? ()
#9 0x000055d5b2cb764b in execute_ex ()
#10 0x000055d5b2c68443 in zend_call_function ()
#11 0x000055d5b2c68819 in call_user_function_ex ()
#12 0x00007f7fa7ae9a86 in sw_call_user_function_ex (ymbol_table=0x0, no_separation=0, params=<synthetic pointer>, param_count=2, retval_ptr_ptr=<synthetic pointer>, function_name=<optimized out>,
object_pp=0x0, function_table=<optimized out>) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/php7_wrapper.h:243
#13 php_swoole_onWorkerStart (serv=0x55d5b466b0f0, worker_id=0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_server.c:770
#14 0x00007f7fa7b3d5f5 in swWorker_loop (factory=factory@entry=0x55d5b466b528, worker_id=worker_id@entry=0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Worker.c:488
#15 0x00007f7fa7b2fc81 in swManager_spawn_worker (factory=0x55d5b466b528, worker_id=0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:678
#16 0x00007f7fa7b30deb in swManager_loop_sync (factory=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:538
#17 swManager_start (factory=factory@entry=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Manager.c:187
#18 0x00007f7fa7b2601a in swFactoryProcess_start (factory=0x55d5b466b528) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/factory/FactoryProcess.c:101
#19 0x00007f7fa7b389ad in swServer_start (serv=serv@entry=0x55d5b466b0f0) at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/src/network/Server.c:542
#20 0x00007f7fa7b04ea7 in zim_swoole_http_server_start (execute_data=0x7f7fb5e121c0, return_value=0x7f7fb5e121b0)
at /media/kcloze/8685937c-af42-4319-aa9b-bb123ccd18ba/data/src/zan/zan-extension/swoole_http_server.c:1480
#21 0x000055d5b2cfc9e6 in ?? ()
#22 0x000055d5b2cb764b in execute_ex ()
#23 0x000055d5b2d0bb77 in zend_execute ()
#24 0x000055d5b2c771c3 in zend_execute_scripts ()
#25 0x000055d5b2c16c10 in php_execute_script ()
#26 0x000055d5b2d0d847 in ?? ()
#27 0x000055d5b2af7d54 in main ()
4.以上参照文档:
http://zanphpdoc.zanphp.io/install.html
文件 https://github.com/zanphp/coroutine/blob/master/src/Task.php 第50行如下:
public function __construct(\Generator $coroutine, Context $context = null, $taskId = 0, Task $parentTask = null)
{
$this->coroutine = $this->caughtCoroutine($coroutine);
$this->taskId = $taskId ? $taskId : TaskId::create();
$this->parentTask = $parentTask;
if ($context) {
$this->context = $context;
} else {
$this->context = new Context();
}
$this->scheduler = new Scheduler($this);
}
这个 $this->scheduler = new Scheduler($this);
这个会把 Scheduler 放在自己的寄存器里,然而 Scheduler 这个对象又把 Task 放在了自己的 task 变量里。形成了相互引用。在处理完毕后并不会释放对象,只有在php垃圾回收机制下才会被清理。不信的话,可以加
public function __destruct()
{
echo "i'm unset";
}
会发现并未协程执行完毕后这个方法并未被执行,内存中还存在。
建议Task中加:
public function release()
{
# 移除对象,避免相互引用导致的对象不可释放
if (isset($this->scheduler))
{
$this->scheduler->release();
unset($this->scheduler);
}
}
Scheduler 中加:
public function release()
{
unset($this->task);
}
并在 Signal::TASK_KILLED
和 Signal::TASK_DONE
时调用。这样在协程处理完毕后,会立即释放对象,避免内存溢出。
php-7.0.10-Win32-VC14-x64
E:\Program Files>composer -disable-tls global require youzan/zan-installer
Changed current directory to C:/Users/Wind/AppData/Roaming/Composer
You are running Composer with SSL/TLS protection disabled.
Warning: Accessing packagist.org over http which is an insecure protocol.
Using version ^1.0 for youzan/zan-installer
./composer.json has been updated
Loading composer repositories with package information
Warning: Accessing packagist.org over http which is an insecure protocol.
Updating dependencies (including require-dev)
Writing lock file
Generating autoload files
E:\Program Files>zan
/\ \ /\
\ \
/'/ ___ __ __ ____ __ ___
\
\ /' / \/\ \/\ \/\_ ,
\ /'\ /' _
`\ \ /\ \L\ \ \ \ // //\ \L./\ /\
\ \ **/\ **/ /\ __/.\ \
//// // ///__///////
Create a new ZanPhp application.
Which type application would you create? (use to select)
PHP Fatal error: Method League\CLImate\TerminalObject\Dynamic\Checkbox\Checkbox::__toString() must not throw an exception, caught Error: Call to undefined function League\CLImate\TerminalObject\Helper\mb_strwidth() in C:\Users\Wind\AppData\Roaming\Composer\vendor\league\climate\src\TerminalObject\Dynamic\Checkbox\CheckboxGroup.php on line 0
Fatal error: Method League\CLImate\TerminalObject\Dynamic\Checkbox\Checkbox::__toString() must not throw an exception, caught Error: Call to undefined function League\CLImate\TerminalObject\Helper\mb_strwidth() in C:\Users\Wind\AppData\Roaming\Composer\vendor\league\climate\src\TerminalObject\Dynamic\Checkbox\CheckboxGroup.php on line 0
E:\Program Files>
https://github.com/youzan/zan/blob/master/src/Network/Http/Exception/Handler/BizErrorHandler.php
https://github.com/youzan/zan/blob/master/src/Network/Http/Exception/Handler/InternalErrorHandler.php
这些文件里面都有html字符串,发现都调用了有赞的静态资源
<link rel="icon" href="https://su.yzcdn.cn/v2/image/yz_fc.ico" />
.....
<script src="https://su.yzcdn.cn/jquery-2.0.3.min.js"></script>
<script src="https://su.yzcdn.cn/jquery.parallaxify-0.0.2.min.js"></script>
如果用的人多,就相当于对你们cdn或者web服务器的ddos, 会消耗你们的资源
启动时 若配了redis连接池 连续coredump
[2017-07-16 01:51:26 #0] worker *0 starting .....
php(32850,0x7fff94a633c0) malloc: *** error for object 0x7fd3c8301030: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
现象:
下载Demo后,服务正常启动.
curl http://127.0.0.1:8030 无输出
检查:
server端 控制台 提示错误为:
PHP Parse error: syntax error, unexpected '*', expecting ',' or ';' in /var/www/html/zanhttp/vendor/zanphp/zan/src/Network/Http/RequestHandler.php on line 43 [2016-06-21 11:21:26 $27845.0] WARNING swManager_check_exit_status: worker#1 abnormal exit, status=255, signal=0 http worker error ..... http worker start .....
原因:
/src/Network/Http/RequestHandler.php on line 43
const DEFAULT_TIMEOUT = 30 * 1000;
// const 不支持表达式赋值 修改为
const DEFAULT_TIMEOUT = 30000;
即可
如题 新版本的swoole里这个函数已经弃用了 但是 Zan\Framework\Store\Database\Mysq\Mysqli
里还是用的这个
现在可以使用的是异步MySQL客户端 swoole_mysql
对象里的query方法
或者协程 Swoole\Coroutine\MySQL
类里的方法
httpClient对象析构销毁的时候没有调用close方法,new大量httpClient对象后,swoole内部不会释放内存,导致内存泄露
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.