AngularJS: comment obtenir un système distant?

Permettez-moi de préciser quel est mon but

Comment prendre une connexion de bureau à distance à partir de mon application Angular.js d'un système d'exécution d'application Windows. Mon serveur est Google App Engine.

Ce que j'ai pensé jusqu'ici:

  1. L'application Windows prend des captures d'écran et envoie à Google App Engine Channel API.
  2. L'API de la chaîne Google App Engine notifiera l'application Angular et lui enverra les captures d'écran et l'affichera.

Le problème avec cette méthode est qu'il est très coûteux et lent.

Demande

Veuillez suggérer un outil ou un api ou une façon de créer une application de partage d'écran.

Ce ne sera pas la réponse que vous recherchez, mais vous lisez d'une manière ou d'une autre.

Tl; dr;

Ce que vous essayez de faire, ce n'est pas un cas d'utilisation d'App Engine et vous ne devriez vraiment pas utiliser App Engine pour implémenter ce type de solution.

Version longue:

  • Comme vous l'avez découvert, l'API du canal deviendra coûteuse et lente pour ce que vous essayez de faire. Cela s'explique par le fait que l'API de canal n'est tout simplement pas destinée à transmettre de grandes quantités de données au client. Il est prévu d'envoyer des mises à jour régulières au client, comme des mises à jour entrantes pour un chat en temps réel ou un ticker de nouvelles. Le meilleur scénario est que vous ne notifiez que le client de nouveaux contenus et que le client demande ce nouveau contenu à partir du serveur. Vous pouvez donc envoyer l'URL de la nouvelle capture d'écran au client et le client le demande. Lorsque vous diffusez un ordinateur de bureau ou une vidéo, cela est très inutile, car ce que vous voulez avec ce type de diffusion est autant de mises à jour que vous pouvez obtenir. Vous pourriez aussi bien échanger tous les quelques millisecondes.
  • L'utilisation de captures d'écran pour partager un ordinateur de bureau est un type particulier de folie car le flux de données ne peut pas être compressé correctement et sera donc beaucoup plus grand qu'il le doit. Habituellement, les systèmes de bureau à distance utilisent une compression très similaire aux algorithmes de compression vidéo où seules les modifications / différences de l'image / image précédente seront transmises et il y a un cadre clé complet de temps en temps. Plus de données signifient plus de bande passante et plus de latence dans votre flux. Il est vraiment important que vous essayez au moins de minimiser le flux de données autant que possible.
  • L'objectif dans la plupart des applications de moteur d'application est d'autoriser la mise à l'échelle sur des milliers de connexions parallèles. Ceci est réalisé en permettant à plusieurs instances de servir le même contenu et en imposant plusieurs restrictions (comme une date limite de demande de 60 secondes pour le frontend / 10 minutes pour la demande de back-end, la bande passante maximale dans une requête unique, etc.) qui réduisent les tâches énormes en petites requêtes Qui peut alors être servi par la multitude d'instances de moteur d'application. Les mêmes restrictions ne vous permettront pas de créer un flux de données continu de longue durée pour quelque chose comme la vidéo ou la diffusion à distance du bureau. Si vous examinez toutes les quelques millisecondes comme indiqué ci-dessus, le moteur d'application engendrerait de nouvelles instances régulièrement, ce qui entraînerait des demandes d'échauffement et d'autres retards.

Mais assez de ce qui ne fonctionnera pas, c'est un exemple de ce qui devrait fonctionner:

  • Les serveurs en continu constituent en fait des serveurs qui permettent la transmission directe aux clients
  • Les serveurs en streaming publient leur URL de service sur votre application de moteur d'application
  • Votre application AngularJS demande un flux depuis l'application du moteur d'application
  • App Engine indique à l'application AngularJS que l'information du serveur en streaming d'en haut
  • Le client demande le flux directement depuis le serveur

Cette approche laisse échapper le moteur d'application en tant que proxy de vos données, de sorte que vous ne devez pas vous soucier des données en continu. Cependant, il est nécessaire que votre serveur soit directement disponible sur Internet.

Alternativement, il existe un grand nombre d'applications / services (twitch.tv pour nommer un exemple) disponibles qui permettent la diffusion en mode bureautique sans que vous n'écriviez une seule ligne de code. De tels flux pourraient simplement être intégrés dans votre application Angular. Puisqu'il ne s'agit pas de recommandations sur le logiciel, je ne veux plus approfondir cette question ici.