Question

Je voudrais afficher des mises à jour en temps réel sur une page Web (basé sur un champ d'état dans une table de base de données qui est modifiée par un processus externe). Sur la base de mes recherches, il y a plusieurs façons de le faire.

  • Long Polling (Comet) - Cela semble être complexe à mettre en œuvre
  • Polling régulier - Je peux avoir un déclencheur de la méthode AJAX une base de données a frappé tous les 5 secondes pour obtenir l'état actuel. Mais je crains que cela aura des problèmes de performance.

Ensuite, je lis sur l'utilisation SqlCacheDependency - essentiellement le cache s'invalidée basée sur un champ dans la table. Je suppose que je peux utiliser l'événement trigerred lorsque le cache est invalidée pour afficher la nouvelle mise à jour à l'utilisateur?

Quelle est une solution facile qui ne sera pas des problèmes de performance?

Était-ce utile?

La solution

Au lieu de vote la base de données une approche plus évolutive et performante serait de scrutin pour l'existence d'un fichier sur votre serveur Web, quelque chose comme un fichier js léger. Le contenu du fichier est pas important, mais pour vous donner une idée que vous pourriez avoir un objet JSON d'une sorte qui décrit plus en détail le résultat du processus.

Ensuite, votre processus d'arrière-plan qui est en train de faire le traitement que l'étape finale peut créer le fichier ou appeler un service Web sur votre niveau Web pour le faire.

Voilà comment cela pourrait fonctionner.

Les utilisateurs appuie sur le bouton qui affiche au serveur

coups de serveur de processus et renvoie un identifiant, par exemple C3201620-E622-4fe2-9F3A-E02FFA613F59

interface utilisateur Web puis sondages peridodically l'existence de C3201620-E622-4fe2-9F3A-E02FFA613F59.js, le javascript gérerait l'erreur 404 et de garder réessayant jusqu'à ce qu'il reçoive un 200

Espérons que cela vous donne quelques idées.

exemple de code pour gérer 404 de jQuery

$.ajax({
        url: '/CheckForStatusChange/C3201620-E622-4fe2-9F3A-E02FFA613F59.json',
        type: "GET",
        success: function(result) {

        },
        error: function(request, status, error) {
        //handle error here and setTimeOut                 

        }); 

Autres conseils

Vous avez 2 questions:

  1. Récupérer les données appuyez sur
  2. Repousser les données aux clients

Article # 1 est facile, supposant que vous avez une requête assez efficace, et vous n'êtes pas pour chaque interrogation utilisateur; juste requête, obtenir les données, et le pousser. Vous pouvez utiliser l'option SqlDependency, ou vous pouvez simplement interroger ce; cela dépend de la façon dont vos données est lourd.

Point n ° 2 est un peu plus délicat, parce que vous devrez soit frapper le serveur en permanence, ou utilisez un serveur comète. Nous avons écrit un serveur comète .NET hautement évolutive, WebSync , plus à Frozen Mountain qui pourrait s'adapter à la facture. Essentiellement, vous avez un processus distinct qui anime la publication, et WebSync géreriez la poussée des données à vos clients.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top