gpt4 book ai didi

iOS zeromq 有时无法在发布/订阅中启动时接收消息

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:04:42 25 4
gpt4 key购买 nike

我正在使用 ZMQ 稳定版 3.2.4 并将其编译到 iOS 中并且还使用 IOS ZMQ Api。它在大多数时候都能完美运行。但是,有时当启动应用程序时,第一条消息丢失并且接收器一直处于空闲状态。重新启动应用程序后,它再次运行良好。

是否需要在 subSocket 中设置一些以使其更稳定?

这是我的代码:

IP_ADDRESS = @"127.0.0.1";

NSString *kEndPoint = [NSString stringWithFormat:@"tcp://%@:%d", IP_ADDRESS, PUB_PORT];
self.pubSocket = [ctx socketWithType:ZMQ_PUB];
[self.pubSocket connectToEndpoint:kEndPoint];

NSString *rEndPoint = [NSString stringWithFormat:@"tcp://%@:%d", IP_ADDRESS, SUB_PORT];
self.subSocket = [ctx socketWithType:ZMQ_SUB];
[self.subSocket connectToEndpoint:rEndPoint];

sleep(1.5); // add sleep to make sure the socket is ready

[self registerListener:self forTopic:TOPIC_topic_resolution];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
pollitems[0].socket = [subSocket socket] ;
pollitems[0].events = ZMQ_POLLIN;

NSData * data = [subSocket receiveDataWithFlags:ZMQ_DONTWAIT];

// receive data and do logic here
});

最佳答案

在我们使用 zmq (libzmq) 的 iOS 应用程序中,我通常设置超时以避免可怕的挂起永远等待接收...为您的 setsockopt 尝试这样的事情:

    int timeout = 6000;
zmq_setsockopt(self->zmqSend, ZMQ_SNDTIMEO, &timeout, sizeof(int));
zmq_setsockopt(self->zmqSend, ZMQ_RCVTIMEO, &timeout, sizeof(int));

希望对您有所帮助!

JB

关于iOS zeromq 有时无法在发布/订阅中启动时接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24821408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com