2010-10-31 4 views
3

J'ai écrit un programme serveur basique basé sur HTTP qui fonctionne en arrière-plan sur mon ordinateur pour me permettre d'automatiser diverses tâches à partir de mon Android (via des requêtes HTTP dans Tasker). Tout cela fonctionne bien (sauf this problem), sauf qu'après plus de 30 minutes d'inactivité, l'application finit par s'endormir, comme si elle était en dehors de la mémoire, et prend une bonne minute pour se réveiller lorsqu'elle reçoit un message Demande HTTP ou lorsque j'essaie de restaurer la fenêtre et d'interagir avec l'interface utilisateur.Comment empêcher mon serveur HTTP de "dormir"?

J'utilise System.Net.HttpListener pour implémenter le serveur (en utilisant des appels asynchrones à BeginListen). Comment devrais-je le garder sur ses orteils?

+0

Avez-vous regardé dans le moniteur de ressources de Windows pour voir ce qui se passe quand le serveur reçoit une demande? Peut-être que le CLR est envoyé à partir du disque. – ide

Répondre

1

Peut-être que vous pourriez faire un autre thread et vérifier si votre instance HttpListerner IsListening périodiquement?

+0

Cela semble avoir fait l'affaire! Merci :) –

3

Est-il possible que votre mémoire de processus soit échangée sur le disque? Peut-être écrire une petite tâche de moniteur qui ne fait que piquer toutes les 5 minutes? Notez que cela peut également être utile pour s'assurer qu'il est toujours en cours - il pourrait vous envoyer un courriel s'il est en panne, par exemple :)

2

Quel est votre système d'exploitation (Windows XP/Seven/Server 2008 ...) et sa distribution? (Accueil/Pro/SBS ...)? Essayez de donner une priorité élevée à votre processus (comme en temps réel).

Vous pouvez aussi effectuer une tâche avec votre processus toutes les 10 minutes ...

1

On dirait que la description du problème manque de mentionner le problème réel lui-même. Sous Windows, les applications ne passent pas en mode veille. Les applications inactives peuvent être permutées, mais cela ne devrait pas prendre beaucoup de temps lorsqu'une demande est reçue. Dans .Net 2 J'ai remarqué un comportement similaire dû à la récupération de place de l'objet d'écoute lui-même ou des objets associés en raison d'une longue inactivité. Essayez de conserver une référence statique de l'objet écouteur. Cela pourrait vous aider.

Questions connexes