2010-09-28 7 views
1

Je dois avoir une communication de haute performance entre 2 applications. J'ai essayé AppleEvent mais ce n'est pas vraiment une bonne option. J'ai pensé utiliser une pipe nommée mais je ne sais pas comment les utiliser dans COCOA.tuyau nommé dans le cacao

Merci d'avance pour votre aide :)

+0

avez-vous essayé des notifications distribuées? – Eimantas

Répondre

5

Il n'y a pas de façon particulière de le faire dans le cacao. Vous feriez essentiellement le fifo et une fois que vous aviez cela, votre processus pourrait alors le lire/l'écrire en utilisant les wrappers standard Cocoa comme NSFileHandle. Vous pouvez vérifier son existence avec NSFileManager ou autre, mais vous devrez toujours appeler mkfifo(2) à un moment donné pour créer le canal nommé.

Alors:

if(mkfifo("/tmp/my_named_pipe", 0644) == -1) { 
    // some error handling 
    abort(); 
} 

// Open and use the fifo as you would any file in Cocoa, but remember that it's a FIFO 
NSFileHandle* fifoIN = [NSFileHandle fileForReadingAtPath:@"/tmp/my_named_pipe"]; 

Personnellement, je recommande l'aide d'un BSD ou socket Unix à la place. Il y a beaucoup de prise en charge de Framework pour les sockets, parfois un canal bidirectionnel est également plus utile, et vous n'avez pas à vous soucier de savoir si le lecteur ou l'éditeur est prêt en premier.

+1

Vous vouliez dire 'fileHandleForReadingAtPath:', non? – Ali

2

Il existe des alternatives aux canaux nommés:

  • Sockets, comme Jason Coco déjà mentionné.
  • Messages de port Mach. Probablement l'option la plus performante, car c'est à peu près la caractéristique de Mach.
  • Objets distribués. Implémenté sur les ports (et je crois que vous pouvez utiliser des ports socket ou Mach), c'est l'option la plus simple à utiliser, puisque vous envoyez des messages aux objets "distants" (vended par d'autres processus) de la même manière que vous les envoyez aux objets locaux (créés dans votre propre processus).
+0

messages Mach Poort semble intéressant. J'irais regarder. Merci de votre aide! :) –