iPhone和Node.js,单次读取多个数据包

时间:2010-09-30 19:38:23

标签: iphone node.js asyncsocket

我觉得我做错了,或者这只是我的新手插座的结果。我在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];

2 个答案:

答案 0 :(得分:2)

作为最近的插座新手,我可以说我的面条很好,真正被常规的,无聊的Unix套接字(用PHP?!)烘焙,以至于我害怕过早地接近整个解放的东西!

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

HTH

答案 1 :(得分: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