Frage

Ich fühle mich wie ich das falsch mache, oder es ist nur ein Ergebnis meiner Anfänger mit Steckdosen. Ich verwende AsyncSocket auf dem iPhone Daten an node.js. zu senden Mein Problem ist, dass jeder so oft, wird die App hängen, und dann werde ich wie 5 oder 10 Nachrichten auf einmal in einem Datum lesen bekommen, anstatt zu trennen, aktuellere liest.

Ist das ein Netzwerk Schluckauf und die Daten gesichert oder sind diese node.js versuchen, intelligent zu sein in meinem Namen und Gruppe zusammen sehr schnell Nachrichten? Gibt es etwas, das ich auf der iPhone Seite senden kann, zu sagen, „das ist das Ende meiner Nachricht ist, für mehr Datenstopp warten“, damit ich sicher sein kann, es ist ein Netzwerkproblem? Ich fühle mich wie es sollte ein abschließendes Zeichen sein, wie asynsocket neue Linien verwendet, aber ich kann nicht, dass die Arbeit mit Knoten zu machen scheinen.

Es ist viel mehr zu mir wichtig, dass die Daten sonst schnell als alles, was kommt.

Danke!

EDIT:. Versucht, 0xFF zu verwenden, aber ich bin nicht sicher, ob ich dieses Recht zu tun, und ich habe nichts zu Test gegen, so dass ich keine Möglichkeit habe, zu wissen,

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

Lösung

Als Stipendiatin letzten Fassung Anfänger kann ich sagen, dass meine Nudel war gut und wirklich durch regelmäßige gebacken, Unix-Sockets langweilig (in PHP ?!), so sehr, dass ich Angst haben, würde die ganze libevent Sache zu nähern bald !

Eine Sache, die ich sagen kann ist, dass es die Aufgabe des Protokolls , um das Ende eines zu signalisieren Nachricht , die zugrunde liegende TCP Rohr vollständig asynchron zu sein scheint.

HTH

Andere Tipps

Übliche TCP-Implementierungen bufferize Daten geschrieben vor dem Senden der Schreibleistung zu erhöhen.

, um dieses Verhalten zu deaktivieren, müssen Sie den Zugriff auf Ihre Steckdose und Set „TCP_NODELAY“ darauf erhalten, wie folgt:

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


Die quick & dirty fix für AsyncSocket ist diesen Code in AsyncSocket.m in dem Verfahren zu stopfen - (BOOL)setSocketFromStreamsAndReturnError:(NSError **)errPtr

(yourNativeSocket wird in dieser Methode genannt native)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top