2009-05-31 6 views
2

C'est plus par curiosité et "pour référence future" qu'autre chose, mais comment Comet est-il implémenté côté base de données? Je sais que la plupart des implémentations utilisent des requêtes HTTP de longue durée pour "attendre" jusqu'à ce que les données soient disponibles, mais comment cela se fait-il du côté serveur? Comment le serveur Web sait-il quand de nouvelles données sont disponibles? Est-ce qu'il interroge constamment la base de données?Implémentation de Comet du côté de la base de données

Répondre

1

Quel DB utilisez-vous? S'il prend en charge les déclencheurs, ce que de nombreux SGBDR font sous une forme ou une autre, alors vous pouvez faire en sorte que le déclencheur déclenche un événement qui indique à la requête HTTP d'envoyer la réponse appropriée. Les déclencheurs suppriment le besoin d'interroger ... l'interrogation n'est généralement pas la meilleure idée.

PostgreSQL semble avoir un très bon support (même PL/Python).

1

cela dépend beaucoup de l'application. La mise en œuvre la plus probable est une sorte de système de messagerie.

Très probablement, votre code côté serveur sera composé d'un bon nombre de parties:

  • quelques serveurs d'application qui hansle les requêtes entrantes,
  • un (séparé) serveur comète qui traite de toutes les connexions ouvertes aux clients,
  • la base de données, et
  • une sorte d'infrastructure de messagerie

dernier sur e, l'infrastructure de messagerie est vraiment la clé. Cela permet aux serveurs d'applications de communiquer avec le serveur de comète. Ainsi, lorsqu'une requête arrive dans le serveur de l'application, un message apparaît dans la file d'attente indiquant au serveur de comète de notifier le (s) client (s) correct (s)

La manière dont la messagerie est implémentée dépend encore beaucoup de l'application. Une implémentation très simple utiliserait simplement une table de base de données appelée messages et interrogerait cela. Mais en fonction de la pile que vous envisagez d'utiliser, il devrait y avoir plus d'outils sophistiqués disponibles.

Dans Rails j'utilise Juggernaut qui écoute simplement sur un port réseau. Chaque fois qu'il y a des données à envoyer, le serveur d'application Rails ouvre une connexion à ce serveur push de poids lourds et lui indique ce qu'il faut envoyer aux clients.

+0

Vous n'avez pas répondu directement à ma question, mais +1 pour la description (et aussi pour le lien vers Juggernaut, puisque j'utilise Ruby). –

Questions connexes