代码之家  ›  专栏  ›  技术社区  ›  Brent

iPhone和node.js,单读多个数据包

  •  0
  • Brent  · 技术社区  · 14 年前

    我觉得我做错了,或者只是因为我的初学者有插座。我在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 回复  |  直到 14 年前
        1
  •  2
  •   Robin    14 年前

    作为最近的一个插座新手,我可以说我的面条是由常规的、无聊的Unix插座(在PHP中)烤得很好,而且是真正的。!)太多了,以至于我不敢太快处理整个libevent事件!

    我能说的一件事是 协议 表示 消息 ,底层的TCP管道似乎是完全异步的。

    高温高压

        2
  •  0
  •   Frédéric Feytons    14 年前

    通常的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 在这种方法中)