php进程永远不会死,基于ZMQContext的$ socket-> send()如何解决?

时间:2018-04-30 09:29:15

标签: php docker zeromq

我需要包含php脚本的docker容器,在死亡之前通过Web套接字发送消息,但过程永远不会停止(即使在exitdie或{{1之后新的例外)。

如果过程永不停止,容器也永远不会停止......

我做了一个例子来说明我的问题:

throw

test.php :

<?php echo "begin\n"; $dsn = 'tcp://127.0.0.1:5555'; $context = new ZMQContext(); $socket = $context->getSocket(ZMQ::SOCKET_REQ); $socket->connect($dsn); $socket->send("test", ZMQ::MODE_DONTWAIT); // this line cause the zombie process $socket->disconnect($dsn); echo "end\n";

Dockerfile :

如何防止阻止或如何从脚本中删除进程? (我尝试 FROM php:7.2.4-cli-alpine3.7 # PHPIZE ENV PHPIZE_DEPS \ autoconf \ cmake \ file \ g++ \ gcc \ libc-dev \ pcre-dev \ make \ git \ pkgconf \ re2c \ zlib-dev \ icu-dev RUN set -xe \ && apk add --update icu \ && apk add --no-cache --virtual .build-deps $PHPIZE_DEPS # Module ZMQ RUN apk add --no-cache --virtual .persistent-deps \ libsodium-dev \ zeromq-dev \ zeromq RUN git clone https://github.com/mkoppanen/php-zmq /tmp/php-zmq \ && cd /tmp/php-zmq \ && phpize \ && ./configure \ && make \ && make install \ && make test \ && docker-php-ext-enable zmq # Cleanup RUN apk del .build-deps \ && rm -rf /tmp/* /usr/local/lib/php/doc/* /var/cache/apk/*. COPY test.php /tmp/test.php CMD ["php", "/tmp/test.php"] 但没有成功)

1 个答案:

答案 0 :(得分:2)

好的,我找到了它!

我尝试了一个示例中看到的 setSockOpt() ,现在流程结束了。

connect()之前添加:

$socket->setSockOpt(ZMQ::SOCKOPT_LINGER, 30);

http://php.net/manual/en/class.zmq.php#zmq.constants.sockopt-linger