1 votes

Écouter un socket sur la machine cliente en utilisant Javascript

Est-ce possible ?

Je suis en train d'écrire une interface d'administration web pour un système de réseau. J'ai besoin d'écouter un port UDP spécifique et le montrer dans le navigateur. Puis-je faire cela en javascript ? Toute autre idée est la bienvenue.

édition anticipée : Voici une autre idée : J'ai un support php et perl côté serveur. JS peut appeler un php script pour commencer à écouter, qui appellera également un perl script, qui a une boucle d'écoute sans fin et collecte les messages reçus dans une variable sink. En théorie ; JS va interroger un script PHP toutes les 2 secondes, récupérer la variable sink et l'afficher sur le navigateur/html. Mais, comment un script PHP peut-il atteindre/lire cette variable "sink" ? Et, comment ou quand le script de perl s'arrêtera-t-il ? Pour la première partie, l'utilisation d'un fichier comme puits est une idée terrible ; je vais recevoir 10 messages de chaîne par seconde et aussi lire puis effacer le contenu du fichier toutes les 2 secondes. Sans parler des mécanismes de verrouillage des fichiers... Pour la deuxième partie : je devrais mettre le timeout quelque part mais ; où ?

éditer : Oui, je peux choisir où l'écoute aura lieu (serveur ou client).

edit2 : Pourquoi est-ce que je veux écouter les messages UDP sur un port spécifique et les afficher sur le navigateur : Le projet sur lequel je travaille a des capteurs spéciaux activés par des touches spécifiques au business, ces dispositifs de capteurs sont compatibles avec le réseau et je les ai programmés pour envoyer un message de diffusion réseau UDP contenant des informations biz-key chaque fois qu'ils détectent quelque chose. Il y a beaucoup de ces dispositifs sur le même réseau, et l'interface web-admin devrait avoir une page où l'utilisateur peut voir ce qui se passe en temps réel ou presque (~5 secondes de délai est acceptable, c'est pourquoi j'ai eu l'idée de poll-every-2seconds à ma première édition).

edit3 : J'ai également trouvé ceci : ActiveSocket qui est un composant ActiveX mais, comme prévu, il ne fonctionne pas sur Firefox et n'a pas de documentation sur sa partie html+JS.

3voto

Ivo Wetzel Points 27802

La solution la plus simple serait un Flash-Brigdem, puisqu'en Javascript il n'y a aucun moyen de se connecter directement à un socket.

J'ai fait quelque chose comme ça il y a quelque temps. Vous pouvez télécharger la source complète. aquí . Vous pouvez exécuter simpleserver.py(nécessite python3) et ensuite accéder à l'index.htm via localhost, afin de le tester.

Notez également que le modèle de sécurité de Flash veut qu'un document XML sur le port 843 soit envoyé à l'adresse suivante

<policy-file-request/>

à la prise. Vous devriez alors répondre avec quelque chose comme :

<?xml version="1.0"?><cross-domain-policy>
        <allow-access-from domain="*" to-ports="*" />
        </cross-domain-policy>

Si rien ne fonctionne sur le port 843, il enverra la même requête au port auquel vous essayez de vous connecter. Mais seulement après que la requête 843 ait expiré.

Il existe d'autres "fonctionnalités" de sécurité, mais vous pouvez les consulter dans les documents d'Adobe.

1voto

Scott Evernden Points 17858

Vous pourriez probablement faire cela en utilisant un .swf flash caché et un peu de code collant. pas possible avec du javascript pur

1voto

peufeu Points 4758

Quel ordinateur écoutera ? Votre serveur ou le client qui exécute le navigateur web ? Pouvez-vous choisir ?

Si l'écoute peut se faire sur le serveur, le plus simple est d'écouter à partir d'une page web PHP, mais ce n'est pas simultané, donc si l'utilisateur appuie sur F5 un peu trop vite, seul un processus php peut écouter à la fois, et cela ne fonctionnera pas.

Une autre solution est, comme vous l'avez dit, de créer un démon d'écoute dans n'importe quel langage (perl, python) qui est aussi un serveur HTTP (il faut 10 lignes de code, importer le module requis) et PHP s'y connecte via une simple requête HTTP pour lui demander les derniers événements qui se sont produits. Le démon n'a besoin de conserver que l'historique dont vous avez besoin, si c'est court, mettez-le dans un simple tableau.

0voto

Oliver Weichhold Points 4600

Le code Javascript n'a pas accès aux sockets. Enfin presque, vous devriez pouvoir faire fonctionner quelque chose dans IE6 en utilisant ActiveX mais c'est à peu près la seule plateforme sur laquelle votre code fonctionnera jamais.

0voto

Adam Bellaire Points 42797

Non, vous ne pouvez pas écouter les sockets en JavaScript.

Quant à l'utilisation d'un langage de script et à l'interrogation des données, c'est possible, mais ce type d'interrogation prolongée est inhabituel. Pourquoi souhaitez-vous procéder de cette manière ? En particulier, pourquoi avez-vous besoin d'écouter le trafic sur des ports particuliers et de l'afficher dans un navigateur Web ? Voulez-vous vérifier le trafic réseau sur la machine où se trouve l'application navigateur est en cours d'exécution, ou bien le navigateur et les scripts sont-ils sur des machines séparées ? Typiquement, une configuration web-admin est utilisée pour à distance la gestion, c'est pourquoi je pose la question.

Il existe peut-être une meilleure façon d'atteindre votre objectif, mais il est difficile de le savoir sans disposer d'informations plus générales sur l'application que vous essayez de rédiger.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X