Le modèle de conception d'observateur est légèrement différent de ce que vous décrivez:
Notez que chaque observateur est notifié par l'objet « observable »; Donc, si vous avez un serveur qui diffuse continuellement des données, alors vous attendez-vous à ce que le serveur vous «avertisse» et que voulez-vous que le serveur vous avertisse? Chaque paquet vous envoie-t-il? Chaque morceau de paquets? En résumé: non, vous ne pouvez pas implémenter le modèle d'observateur sur une application client/serveur. Il n'y a pas de moyen (facile) pour un serveur d'invoquer une méthode de notification sur votre application client et si votre client est déconnecté, il ne se désinscrit pas de l'observable.
Retour à votre question ... vous êtes limité par l'architecture: les sockets bloquants (tcp/udp) fonctionnent tous en bloquant jusqu'à ce que vous receviez des données. Une fois que vous recevez des données, vous devez passer en boucle et appeler à nouveau pour recevoir plus de données. Une alternative consiste à utiliser des sockets asynchrones:
communication socket asynchrone est probablement aussi proche que vous obtiendrez le motif d'observateur. En outre, vous souhaitez utiliser le protocole UDP car vous disposez de données en continu et UDP est spécialement conçu pour le streaming de données. Si vous ne voulez pas manquer de paquets (en raison du manque de fiabilité d'UDP), vous pouvez utiliser reliable UDP.
Avez-vous regardé [Boost.Signals2] (http://www.boost.org/doc/libs/1_47_0/doc/html/signals2.html)? – Praetorian