Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ZeroMQ与PHP订阅服务器丢失消息_Php_Messages_Zeromq_Subscriber - Fatal编程技术网

ZeroMQ与PHP订阅服务器丢失消息

ZeroMQ与PHP订阅服务器丢失消息,php,messages,zeromq,subscriber,Php,Messages,Zeromq,Subscriber,我正在使用带有php绑定的zeromq连接到Freeswitch(VOIP软件交换机)中的zmq模块 肖特:我在输掉比赛。 长: FRESwitCH中的ZMQ模块是在C++中作为发布服务器实现的。 我的PHP代码如下: <?php $context = new ZMQContext(); echo "connect to freeswitch zmq module..."; $sub = new ZMQSocket($context, ZMQ::SOCKET_SUB);

我正在使用带有php绑定的zeromq连接到Freeswitch(VOIP软件交换机)中的zmq模块

肖特:我在输掉比赛。 长: FRESwitCH中的ZMQ模块是在C++中作为发布服务器实现的。 我的PHP代码如下:

<?php
  $context = new ZMQContext();

  echo "connect to freeswitch zmq module...";
  $sub = new ZMQSocket($context, ZMQ::SOCKET_SUB);
  $sub->setSockOpt(ZMQ::SOCKOPT_SUBSCRIBE,"");
  $sub->connect("tcp://192.168.20.73:5556");
  $hwm = $sub->getSockOpt(ZMQ::SOCKOPT_HWM);
  echo "ok.hwm: $hwm\n";

  echo "looping\n";
  while(1) {
  $data = $sub->recv();
  $d = json_decode($sub->recv(),TRUE);
  $event = $d["Event-Name"];
  $date = $d["Event-Date-Local"];
  $ts = $d["Event-Date-Timestamp"];
  $msgnr = $d["ZMQ-Msg-Cnt"];
  echo "PHP: $date msg# $msgnr $ts received $event\n";
}
?>
PHP代码有什么问题吗? PHP有什么诀窍/必须做的事/提示吗

提前感谢,,
杰拉尔德·韦伯(gerald weber)

您两次调用了
recv
函数,因此它正在加载一条消息,跳过对它的任何处理,然后加载第二条消息:

$data = $sub->recv();
// This is your first message, called in a blocking mode

$d = json_decode($sub->recv(),TRUE);
// and here's your second one, called in a non-blocking mode
将这两行更改为仅一行:

$d = json_decode($sub->recv());

您将调用
recv
函数两次,因此它将加载一条消息,跳过对其进行的任何处理,然后加载第二条消息:

$data = $sub->recv();
// This is your first message, called in a blocking mode

$d = json_decode($sub->recv(),TRUE);
// and here's your second one, called in a non-blocking mode
将这两行更改为仅一行:

$d = json_decode($sub->recv());

我觉得自己太傻了…谢谢你。现在工作。很抱歉浪费大家的时间。我觉得自己太傻了…谢谢你。现在工作。很抱歉浪费大家的时间