0

私はこれを間違っているように感じます、またはそれは単にソケットを持った初心者の結果です。iPhoneでasyncSocketを使用してnode.jsにデータを送信しています。私の問題は、アプリが頻繁にハングし、1回のデータ読み取りで一度に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全体にすぐに近づくことを恐れています!

私が言えることの1つは、メッセージの終わりを通知するのはプロトコルの仕事であり、基盤となるTCPパイプは完全に非同期のようです。

HTH

于 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 に答える