Rumah > pembangunan bahagian belakang > tutorial php > 使用swoole的时候出现EPOLLIN handle failed

使用swoole的时候出现EPOLLIN handle failed

WBOY
Lepaskan: 2016-06-06 20:32:51
asal
1911 orang telah melayarinya

出现的错误如下

<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>
Salin selepas log masuk
Salin selepas log masuk

我借鉴了这里面的代码 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>
Salin selepas log masuk
Salin selepas log masuk

我刚刚看了下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>
Salin selepas log masuk
Salin selepas log masuk

我借鉴了这里面的代码 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>
Salin selepas log masuk
Salin selepas log masuk

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


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


PHP 5.5.9,swoole 1.7.17

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


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

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan