2010-06-17 25 views
1

J'ai récemment rencontré quelques cas où un serveur distribuerait un flux d'événements qui contient exactement les mêmes données pour tous les écouteurs, comme une boîte 'activité récente'. Il m'est venu à l'esprit qu'il est assez étrange et inefficace d'avoir un serveur comme Apache qui exécute un traitement de thread et interroge la base de données pour chaque flux de comète contenant les mêmes données. Ce que je ferais pour ces flux globaux (pas par utilisateur) est d'exécuter un seul thread qui émet continuellement des données, et un nouveau thread (vert) pour chaque nouvelle requête qui sort les en-têtes et qui ensuite fusionne dans le flux principal. fil.Serveur de comète à un seul thread rapide, possible?

Est-il possible pour un thread de servir plusieurs socket, ou pour plusieurs clients d'écouter la même socket?

Un exemple

o = événement

 # threads received 
| a b # 3 
o// # 3  - 
|/_/ 
|  # 1 
o c # 2  a, b 
|/
o/  # 2  a, b 
o  # 1  a, b, c 
|  #     connection b closed 
o  # 1  a, c 

Est-ce que quelque chose comme cela existe? Cela fonctionnerait-il? Est-il possible de faire? Clause de non-responsabilité: Je ne suis pas un expert en matière de serveur.

Répondre

1

Découvrez node.js - serveur monothread, piloté par événements. Utilise JavaScript en bonus.

+0

Ça a l'air bien :) Would Twisted fait la même chose? Ils le mentionnent quelque part. – Pepijn

1

Si vous utilisez ASP.NET, le post suivant devrait être utile

http://beta.codeproject.com/KB/aspnet/CometAsync.aspx

Par ailleurs, il est possible de mettre en œuvre la comète pour servir plus d'un client par thread, mais un seul fil pour tous les clients ne semble pas suffisant?

+0

Je suis plus en Python et Clojure – Pepijn

0

Vous parlez de "requêtes web asynchrones" appliquées à Comet, certaines comme "Comet asynchrone". À mon avis cette approche, si populaire ces jours-ci, est deeply flawed.