2012-02-29 6 views
0

GCDAsyncSocketとAsyncSocketの両方のタイトルは非同期であり、どちらも類似しています。しかし、ソケットに関するすべてのことは、TCPデータパケットからの無限の長さの単一の連続したストリームを扱うことです。最初は、私はちょっと混乱していました。AsyncSocketは、カスタムリクエストとレスポンスパケットを作成し、非同期的にそれらを処理することによっていくつかの魔法を実行すると考えました(例えば、リクエストA、B、Cを作成すると、異なる順序、例えば、B、C、A)。ソケットの世界を少し掘り下げた後、私はサーバーから(ソケット読み込みを介して)データが非同期ではなく、同期していることを理解しました。 1つのストリームを読み込みパケットに分割し、デリゲートクラスのコールバックを作成することです。リクエストをA、B、Cにすると、サーバからの応答はA、B、Cの順番になります。 AFAIK、AsyncSocketはメイン実行ループを使用するので、メインスレッド、メインキューを再び使用します。だから、非同期ということはどういう意味ですか?AsyncSocket/GCDAsyncSocketisのどの部分が非同期であるのですか?

答えて

2

読み取りと書き込みの呼び出しがスレッドをブロックせずに即座に戻り、後で委譲やブロックによって結果を処理できるという点で非同期です。

0

UIAdamが正しいです。たとえば、AsyncSocketは、他のスレッドで結果を処理することによってストリーム・コールバックを実装します。ソースコードの部分は次のとおりです。

static void MyCFReadStreamCallback (CFReadStreamRef stream, CFStreamEventType type, void *pInfo) { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    AsyncSocket *theSocket = [[(AsyncSocket *)pInfo retain] autorelease]; 
    [theSocket doCFReadStreamCallback:type forStream:stream]; 

    [pool drain]; 
} 
関連する問題