Php-zmq分段错误

时间:2013-06-17 10:12:31

标签: php linux apache zeromq

我正在使用PHP和ZMQ绑定在linux中运行apache。 为每个页面加载运行此代码时,它可以正常工作:

$_SESSION['ZMQcontext'] = new ZMQContext(1);
$_SESSION['req'] = new ZMQSocket($_SESSION['ZMQcontext'], ZMQ::SOCKET_REQ);
$_SESSION['req']->connect("tcp://localhost:30000");

// Set maximum wait time on receive to 250 milliseconds
$_SESSION['req']->setSockOpt(ZMQ::SOCKOPT_RCVTIMEO, 250);

但后来我想我不应该为每个页面加载创建一个新的ZMQ上下文并连接套接字,然后我就这样写了:

if(!isset($_SESSION['ZMQcontext'])) {
  $_SESSION['ZMQcontext'] = new ZMQContext(1);
}

if(!isset($_SESSION['req'])) {
  $_SESSION['req'] = new ZMQSocket($_SESSION['ZMQcontext'], ZMQ::SOCKET_REQ);
  $_SESSION['req']->connect("tcp://localhost:30000");

  // Set maximum wait time on receive to 250 milliseconds
  $_SESSION['req']->setSockOpt(ZMQ::SOCKOPT_RCVTIMEO, 250);
}

现在我在Apache错误日志中得到了这个:

[notice] child pid 10411 exit signal Segmentation fault (11)

所以有人都知道为什么会这样吗?

ZMQ上下文是否存储在PHP本地内存地址中?我认为它应该存储在Apche应该能够在使用$ _SESSION变量时找到的内存地址中。

1 个答案:

答案 0 :(得分:0)

你应该在connect()之前设置socketOpt(),但我不知道Segmentation故障是否与此相关。

  

警告:除ZMQ_SUBSCRIBE,ZMQ_UNSUBSCRIBE和ZMQ_LINGER外,所有选项仅对后续套接字绑定/连接生效。

http://api.zeromq.org/2-2:zmq-setsockopt