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