Giter Site home page Giter Site logo

youzan / zanphp Goto Github PK

View Code? Open in Web Editor NEW
1.4K 128.0 240.0 2.71 MB

PHP开发面向C10K+的高并发SOA服务 和RPC服务首选框架

Home Page: http://zanphp.io/

License: MIT License

PHP 98.14% HTML 1.39% Makefile 0.08% Shell 0.38%
php zanphp rpc soa asyncio yield high-performance

zanphp's Introduction

有赞logo

zanphp logo

基于 PHP 协程的网络服务框架,提供最简单的方式开发面向 C10K+ 的高并发SOA服务和RPC服务。

每天为2,000+个服务提供300,000,000+次访问量支持,广泛应用于有赞各项业务。

License Build Status

核心特性

  1. 基于 yield 实现了独立堆栈的协程
  2. 类似于 Golang 的并发编程模型实现
  3. 基于 zan 提供异步非阻塞I/O服务
  4. 连接池支持(内置 MySQL、Redis、syslog 等多种组件)
  5. 类似 Golang 的 defer 机制解决由于异常导致的资源未释放、锁未释放的问题
  6. 可继承的View布局及组件化支持,方便完成 bigPipe/bigRender/首屏加载优化等不同的渲染方式
  7. 基于模型驱动的 SQLMap,实现了 SQL 的快速定位及方便的 sharding、cache 支持
  8. 提供类似于 Laravel 的 middleware(Filters & Terminators) 机制
  9. Di及单元测试的良好支持
  10. 完整的RPC远程服务调用方案

框架定位

ZanPHP 的定位是高并发 Web 服务或业务中间件。

ZanPHP既可以满足创业公司或者个人建站的需求,也可以满足服务化架构下的框架需求。

ZanPHP 参考了很多 Golang 特性,不过目的绝不是为了替换掉 Golang。

PHP 在业务系统开发上的优势明显,而 Golang 相信会是将来系统编程的霸主。

ZanPHP 和 Golang 的边界是:ZanPHP做业务系统;Golang 做平台系统(中间件或基础服务组件)。

而 ZanPHP 和 Golang 编程模型的驱近,是希望能给PHP程序员一个更好的桥梁到Golang。

理想的技术栈是:ZanPHP + Go + 少量的C/C++。

当然对于致力于终身coding的码农来说:Java依然是很难跨过去的坎。

官方文档

Zan PHP 的文档仓库地址:zanphp-doc

在线查看文档 http://zanphpdoc.zanphp.io/ ✈

常用链接

官方交流渠道

捐赠我们

请点击 -> 捐赠通道

License

Zan PHP 框架基于 MIT license 进行开源。

zanphp's People

Contributors

agalwood avatar daryl-l avatar delai avatar dsphper avatar fxxkscript avatar goghcrow avatar moolex avatar netroby avatar sukui avatar sunjun-qima avatar suqiangithub avatar sxdd avatar touring avatar vimac avatar voidman avatar winglechen avatar xhjcehust avatar xxvholic avatar zhuguangyao avatar znddzxx112 avatar zxcvdavid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zanphp's Issues

协程的底层有一处写的有问题,会出现内存溢出

文件 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_KILLEDSignal::TASK_DONE 时调用。这样在协程处理完毕后,会立即释放对象,避免内存溢出。

swoole_mysql_query已经弃用了

如题 新版本的swoole里这个函数已经弃用了 但是 Zan\Framework\Store\Database\Mysq\Mysqli里还是用的这个
现在可以使用的是异步MySQL客户端 swoole_mysql对象里的query方法
或者协程 Swoole\Coroutine\MySQL类里的方法

默认的错误页面是不是可以不依赖有赞的静态资源

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, 会消耗你们的资源

bash ./zan报错

image

直接运行报错,目前已定位到是tput命令不存在的问题,如何解决?
如果要安装tput如何安装?

系统为docker的ubuntu:14.04

连续coredump

启动时 若配了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

youzan/zanhttp的Demo正常启动 ,访问无输出

现象:
下载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; 即可

跑zan脚手架项目,出现coredump

  1. 执行命令:
    php ./bin/httpd

  2. 得到报错信息:

[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

建议nova组件的StructSpecManager新增便捷填充数据方法

源码

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;

    }

}

Enable sockets support, require sockets extension

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

httpClient类存在内存泄露

httpClient对象析构销毁的时候没有调用close方法,new大量httpClient对象后,swoole内部不会释放内存,导致内存泄露

windows下php7环境安装后执行zan报错

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)

  • Installing seld/cli-prompt (1.0.2)
    Failed to download seld/cli-prompt from dist: You must enable the openssl extension to download files via https
    Now trying to download from source
  • Installing seld/cli-prompt (1.0.2)
    Cloning 8cbe10923cae5bcd7c5a713f6703fc4727c8c1b4
  • Installing league/climate (3.2.1)
    Failed to download league/climate from dist: You must enable the openssl extension to download files via https
    Now trying to download from source
  • Installing league/climate (3.2.1)
    Cloning b103fc8faa3780c802cc507d5f0ff534ecc94fb5
  • Installing youzan/zan-installer (1.0.9)
    Failed to download youzan/zan-installer from dist: You must enable the openssl extension to download files via https
    Now trying to download from source
  • Installing youzan/zan-installer (1.0.9)
    Cloning fcd45ec79b84843052a00401dad4570f69e5f993

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>

Singleton trait无法在子类使用

<?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();

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.