0

我觉得我做错了,或者这只是我的新手使用套接字的结果。我在 iPhone 上使用 asyncSocket 将数据发送到 node.js。我的问题是,应用程序每隔一段时间就会挂起,然后我会在一次数据读取中一次收到 5 或 10 条消息,而不是单独的、更及时的读取。

这是网络故障和备份的数据,还是这个 node.js 试图代表我变得聪明并将非常快速的消息组合在一起?有什么我可以在 iPhone 端发送的信息说“我的信息到此结束,停止等待更多数据”,这样我就可以确定这是网络问题?我觉得应该有一个终止字符,比如 asynsocket 使用新行,但我似乎无法使用节点。

对我来说,数据快速到达比其他任何事情都重要得多。

谢谢!

编辑:一直在尝试使用 0xFF 但我不确定我做对了,而且我没有任何要测试的东西,所以我无法知道。

...
[asyncSocket writeData:data withTimeout:-1 tag:0];
NSData* term = [NSData dataWithBytes:"\xFF" length:1];
[asyncSocket writeData:term withTimeout:-1 tag:0];
4

2 回答 2

2

作为最近的套接字新手,我可以说我的面条是由普通的、无聊的 Unix 套接字(在 PHP 中?!)烤得很好,以至于我害怕过早接触整个 libevent 的事情!

我可以说的一件事是协议的工作是发出消息结束的信号,底层的 TCP 管道似乎是完全异步的。

高温高压

于 2010-09-30T20:40:18.253 回答
0

通常的 TCP 实现会在发送写入数据之前对其进行缓冲以提高写入性能。

要禁用该行为,您必须访问您的套接字并在其上设置“TCP_NODELAY”,如下所示:

int yes = 1;
setsockopt(yourNativeSocket, IPPROTO_TCP, TCP_NODELAY, (void *)&yes, sizeof(yes));


AsyncSocket 的快速修复方法是将此代码插入 AsyncSocket.m 的方法中 - (BOOL)setSocketFromStreamsAndReturnError:(NSError **)errPtr

(在此方法yourNativeSocket中调用)native

于 2010-12-28T17:38:15.157 回答