2010-08-27 3 views
2

Je travaille sur la conception d'un système collaboratif où plusieurs utilisateurs peuvent éditer le même document, un peu comme les googledocs, et je suppose que les «suggestions de recherche», mais en aucun cas aussi avancé.À quelle fréquence puis-je demander ajax de nouvelles données?

Ma question est la suivante: est-ce que mon design fonctionnera? Je connais assez de php/ajax pour concevoir ceci, en utilisant jQuery pour la partie ajax. Mais je n'ai jamais fait un tel système, et donc la conception peut avoir d'énormes défauts.

La partie modifiable de la page Web est une table, où certaines cellules peuvent être éditées (encore une fois un peu comme les feuilles de calcul google docs).

En théorie, cela fonctionne, chaque fois qu'une cellule de tables est modifiée, les changements sont stockés dans une histoire, et tous les 1000ms (après le dernier message retourné avec succès) Je posterai les changements cellulaires à un serveur

En même temps, une autre fonction ajax interroge le serveur (également toutes les 1000ms après le dernier appel réussi) et demande une liste des changements effectués sur toutes les cellules.

Est-ce la manière simple de google le fait?

+0

Peut-être lié: COMET: http://en.wikipedia.org/wiki/Comet_(programming) –

+0

Si vous interrogez chaque 1000ms de toute façon (et vous n'utilisez pas Comet), vous pouvez utiliser ces demandes à la fois pour l'envoi et recevoir des changements. Permet d'économiser jusqu'à la moitié des demandes. –

Répondre

1

Ceci est un sujet discutable et la plupart des solutions dépendent des exigences et des cas d'utilisation plutôt que de ce qui est "correct". L'une des solutions plus complexes consiste à utiliser Sémaphore:

http://en.wikipedia.org/wiki/Semaphore_(programming)

Le drapeau de sémaphores de chemin de fer: http://en.wikipedia.org/wiki/Railway_semaphore_signal

Cela dit, dans votre cas, je soupçonne que la « dernière valeur écrite » doit être utilisé. Il suffit que chaque modification soit mise en file d'attente sur le serveur, puis appliquée à sa cellule. Évidemment, il y aura des cas où les données sont remplacées de façon inappropriée, mais c'est là que les humains entrent en jeu.

Vous pouvez choisir de détecter lorsque deux utilisateurs ont mis au point et modifient la même cellule. Dans ce cas, envoyez un avis à chaque utilisation indiquant que leurs modifications peuvent entrer en conflit avec un autre utilisateur. L'utilisateur le moins agressif va reculer et aller faire autre chose. Évidemment, il y a plus de cas tels que les modifications de masse, mais encore une fois, tout dépend de vos besoins.

0

Eh bien, vous pouvez réduire ces deux requêtes à un en publiant la liste des changements et en recevant une liste de changements en un seul coup. Vous pouvez l'optimiser en vérifiant uniquement si l'utilisateur utilise réellement la page (par exemple, si vous avez reçu un événement mouseover au cours des 30 dernières secondes). Et vous pourriez décider de frapper le serveur chaque seconde n'est pas nécessaire; Peut-être que 10 secondes suffiront. Après tout, il est réaliste que cela prenne plus de temps que 1s pour terminer un appel si votre réseau est lent. Ensuite, il s'agit de savoir quel type d'évolutivité vous avez besoin de votre serveur et vous seul pouvez répondre à cette question. Plus vous polluez, moins les utilisateurs peuvent prendre en charge votre serveur Web.

Google Docs (je pense) utilise une connexion push constamment ouverte pour recevoir des mises à jour plutôt que des interrogations, mais ce type d'architecture ne doit pas être pris à la légère. Et bien sûr, ils ont plusieurs milliers de serveurs.

Questions connexes