使用ZMQ获取freeswitch事件
我想使用ZMQ从freeswitch获取事件。我在freeswitch中启用了使用ZMQ获取freeswitch事件,c,zeromq,freeswitch,C,Zeromq,Freeswitch,我想使用ZMQ从freeswitch获取事件。我在freeswitch中启用了mod_event_socket和mod_event_zmq,我使用以下代码接收事件,但我没有得到任何信息 #include <zmq.h> #include <string.h> #include <stdio.h> #include <unistd.h> #include <assert.h> static char * s_recv (void *so
mod_event_socket
和mod_event_zmq
,我使用以下代码接收事件,但我没有得到任何信息
#include <zmq.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
static char * s_recv (void *socket) {
char buffer [256];
int size = zmq_recv (socket, buffer, 255, 0);
if (size == -1)
return NULL;
if (size > 255)
size = 255;
buffer [size] = 0;
return strdup (buffer);
}
int main (int argc, char *argv [])
{
// Socket to talk to server
void *context = zmq_ctx_new ();
void *subscriber = zmq_socket (context, ZMQ_SUB);
int rc = zmq_connect (subscriber, "tcp://10.50.202.169:5556");
assert (rc == 0);
char filter[256] = {0};
rc = zmq_setsockopt (subscriber, ZMQ_SUBSCRIBE,
"", 256);
assert (rc == 0);
// Process 100 updates
int update_nbr;
for (update_nbr = 0; update_nbr < 100; update_nbr++) {
char *string = s_recv (subscriber);
printf("%s",string);
free (string);
}
zmq_close (subscriber);
zmq_ctx_destroy (context);
return 0;
}
#包括
#包括
#包括
#包括
#包括
静态字符*s_recv(void*socket){
字符缓冲区[256];
int size=zmq_recv(套接字,缓冲区,255,0);
如果(大小==-1)
返回NULL;
如果(大小>255)
尺寸=255;
缓冲区[大小]=0;
返回strdup(缓冲区);
}
int main(int argc,char*argv[])
{
//与服务器对话的套接字
void*context=zmq_ctx_new();
void*subscriber=zmq_套接字(上下文,zmq_SUB);
int rc=zmq_连接(订户,“tcp://10.50.202.169:5556");
断言(rc==0);
字符过滤器[256]={0};
rc=zmq_setsockopt(订户,zmq_订阅,
"", 256);
断言(rc==0);
//处理100个更新
国际更新(nbr);
对于(更新\u nbr=0;更新\u nbr<100;更新\u nbr++){
char*string=s_recv(订户);
printf(“%s”,字符串);
自由(弦);
}
zmq_关闭(用户);
zmq_ctx_销毁(上下文);
返回0;
}
我正在为freeswitch的这两个模块使用默认配置。与freeswitch的zmq连接成功吗?
FreeSWITCH是否实际加载了
mod\u event\u zmq模块?您的问题在哪里?我想问,为什么这个模块没有收到任何东西。是的。mod_event_zmq已成功加载我是否正确使用筛选器?现在,我想得到一切。看起来还不错,但需要更深入的挖掘,可能需要查找来源。谢谢。我将0
作为zmq\u setsockopt
的最后一个参数,解决了这个问题。