gpt4 book ai didi

objective-c - 套接字通信: has anyone zeromq lib working in your iOS project?

转载 作者:行者123 更新时间:2023-11-29 04:49:28 32 4
gpt4 key购买 nike

目前,我正在尝试让该库在我的项目中运行,但没有结果。我将其源类和 Objective-C 包装类(ZMQContext、ZMQSocket)复制到我的项目中,并能够成功构建它。但是,当我尝试向服务器发送请求时,我收到“资源临时不可用”。这是我的代码:

ZMQContext *context = [[ZMQContext alloc] initWithIOThreads:1];    
ZMQSocket *socket =[context socketWithType:ZMQ_REQ];
BOOL success = [socket connectToEndpoint:@"tcp://X.X.X.X:X"];

if (success){
NSLog(@"connected to server");
}

NSData *data = [self RequestData];

success = [socket sendData:data withFlags:0];

if (success){
NSLog(@"Data sent to server");
}

不知何故,“connectToEndpoint”调用成功,但我不能对发送说同样的话。我可以确保主机可以通过端口访问,因为服务器端套接字通信版本已经处于生产状态。只是好奇,有人在 iOS 上使用 Zeromq 吗?

更新:我也将同样的问题作为问题发布到 github 项目 here得到的答案是:“你这里只展示了一侧的代码,如果另一侧没有运行ZMQ,自然无法交换消息”。这意味着我们不能仅使用 ZMQ 作为客户端(对于使用其他库或自定义解决方案实现的现有服务器)。如果这是真的,那么 ZMQ 的作用就非常有限。

最佳答案

我将为那些也偶然发现 ZeroMQ 应用程序的人澄清一点,因为缺乏有关该东西如何工作的基本信息。在我的情况下,我有现有的服务器通过套接字接受连接,以便可以发送和接收数据。所有通过套接字的数据都通过 tcp 数据包(在低级别),但您不必担心数据如何在 tcp 数据包中传输。对于套接字,您需要知道的就是需要构造一个字节数据包并将其发送到服务器。服务器还将返回一个字节包,您有责任如何解释这些字节。例如,如果我想向服务器发送 2 个字节的数据,例如 1 个字节的值 1 和另一个字节的值 2,我将需要构造并发送 00000001 00000010 (没有空格:))。服务器也会返回一些字节。

问题是,对于原始套接字通信,您必须手动实现协议(protocol) - 规则。为什么?因为您必须手动检查收到的数据包是否具有正确的长度、正确的数据。服务器和客户端必须就数据格式、哪个字节是状态、哪个字节表示数据包长度以及哪个字节表示数据达成一致。例如,假设服务器正在向您发送原始字节:

10001000 10010111 01101001 01111110 01110110 11100001

客户端和服务器都需要知道每个字节的含义。因此,在我的情况下,服务器已经拥有自己的解析器和关于字节应该出现的顺序的规则(它可能被命名为自定义协议(protocol))。例如,1字节是请求命令,4字节是数据包大小,1字节是请求状态,其余字节是数据。当您使用 HTTP 等更高协议(protocol)与服务器通信时,所有操作都是免费完成的,您只需推送或抓取数据即可。另外,ZeroMQ 也是如此,因为它已经有自己的解析规则,所以你只需推送和抓取数据,但正如前面提到的,客户端和服务器都需要使用该库。

当我发布问题时,我正在寻找一些有助于套接字通信的库,但没有它自己的协议(protocol)。目前,我正在尝试使用 AsyncSocket。

关于objective-c - 套接字通信: has anyone zeromq lib working in your iOS project?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9109340/

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