首页 > 后端开发 > php教程 > 使用swoole的时候出现EPOLLIN handle failed

使用swoole的时候出现EPOLLIN handle failed

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-06-06 20:32:51
原创
1938 人浏览过

出现的错误如下

<code>swReactorEpoll_wait#270: EPOLLIN handle failed. fd=17. Error: Success[0].
PHP Warning:  Unknown: swoole_event: onRead handler error in Unknown on line 0
</code>
登录后复制
登录后复制

我借鉴了这里面的代码 http://www.oschina.net/news/52997/swoole-1-7-3 ,在处理逻辑时我做了一个简单的轮询分配机制,把主进程获取的任务发送给子进程异步处理

<code>php</code><code>function process_function(swoole_process $worker) {
    swoole_event_add($worker->pipe, function () use ($worker) {
        $recv = $worker->read();
        // 处理逻辑 ...
    });
}

function dispatch_process($task) {
    global $workers;
    static $pos;

    foreach ($handlers as $handler) {
        $pos = NULL === $pos ? 0 : ($pos write($task);
    }
}

$workers = [];
for ($i = 0; $i start();
    $workers[] = [$pid, $process];

    echo "create process {$pid}\n";
}

while (true) {
    $task = $redis->brPop('message', 10);

    if ($task) {
        dispatch_process($task[1]);
    }
}
</code>
登录后复制
登录后复制

我刚刚看了下ulimit -a,是默认的1024,所以猜测是不是这里出错,但看报错也不是很像。大家有什么思路吗?


更新,我已经尝试调整过ulimit,没有任何作用。而且这个问题只会在运行一段时间后触发,且内存也没有泄漏。


PHP 5.5.9,swoole 1.7.17

回复内容:

出现的错误如下

<code>swReactorEpoll_wait#270: EPOLLIN handle failed. fd=17. Error: Success[0].
PHP Warning:  Unknown: swoole_event: onRead handler error in Unknown on line 0
</code>
登录后复制
登录后复制

我借鉴了这里面的代码 http://www.oschina.net/news/52997/swoole-1-7-3 ,在处理逻辑时我做了一个简单的轮询分配机制,把主进程获取的任务发送给子进程异步处理

<code>php</code><code>function process_function(swoole_process $worker) {
    swoole_event_add($worker->pipe, function () use ($worker) {
        $recv = $worker->read();
        // 处理逻辑 ...
    });
}

function dispatch_process($task) {
    global $workers;
    static $pos;

    foreach ($handlers as $handler) {
        $pos = NULL === $pos ? 0 : ($pos write($task);
    }
}

$workers = [];
for ($i = 0; $i start();
    $workers[] = [$pid, $process];

    echo "create process {$pid}\n";
}

while (true) {
    $task = $redis->brPop('message', 10);

    if ($task) {
        dispatch_process($task[1]);
    }
}
</code>
登录后复制
登录后复制

我刚刚看了下ulimit -a,是默认的1024,所以猜测是不是这里出错,但看报错也不是很像。大家有什么思路吗?


更新,我已经尝试调整过ulimit,没有任何作用。而且这个问题只会在运行一段时间后触发,且内存也没有泄漏。


PHP 5.5.9,swoole 1.7.17

你使用的PHP、swoole版本分别是多少?
这个错误表示回调函数执行错误,具体什么原因可能还需要查一下。


此问题的原因是你的PHP代码抛出了异常,未捕获。会导致Swoole的事件回调函数执行失败。

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
怎么学好php
来自于 1970-01-01 08:00:00
0
0
0
PHP扩展intl
来自于 1970-01-01 08:00:00
0
0
0
php数据获取?
来自于 1970-01-01 08:00:00
0
0
0
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板