web-dev-qa-db-fra.com

Comment établir une TCP connexion Socket à partir d'un navigateur Web (côté client)?

J'ai lu WebSockets mais ils ne semblent pas être de purs "sockets", car il y a un protocole de couche application sur eux. " ws: "

Existe-t-il un moyen de faire une connexion socket pure à partir d'un navigateur Web pour animer des pages Web?

Voici mes coups de couteau au hasard dans le noir

  • Applets sockets fournis par Java (besoin Java installé)
  • Sockets Flash fournis par Flash (besoin d'un flash installé)

Mais à propos de HTML5, pourquoi sont-ils appelés WebSockets s'ils ne sont pas des Sockets?

Le protocole websocket est-il si simple à implémenter qu'il est "presque" -sockets?

23
Hernán Eche

J'ai lu sur WebSockets mais ils ne semblent pas être de purs "sockets", car il y a un protocole de couche application sur eux.

[Le] protocole websocket est-il si simple à mettre en œuvre qu'il [est] "presque" -sockets?

Autoriser des connexions socket régulières directement depuis le navigateur ne se produira jamais car cela ouvre un risque énorme. WebSockets est à peu près aussi proche des sockets brutes du navigateur que vous allez en avoir. La prise de contact WebSockets initiale est similaire à une prise de contact HTTP (permettant aux serveurs Web de le proxy/pont) et ajoute la sécurité de type CORS. En outre, WebSockets est un transport basé sur les messages (plutôt que de diffuser en tant que TCP brut) et cela se fait en utilisant un en-tête de deux octets sur chaque trame de message.

Même le flash n'est pas en mesure d'établir des connexions brutes TCP. Les sockets Flash ajoutent également la sécurité CORS, mais au lieu d'une poignée de main intrabande, les connexions de socket flash établissent une connexion au port 843 sur le serveur cible pour demander un fichier de politique de sécurité.

Existe-t-il un moyen de faire une connexion socket pure à partir d'un navigateur Web pour animer des pages Web?

Oui, vous pouvez utiliser mon websockify bridge/proxy qui permet à un navigateur compatible WebSockets de se connecter directement à un socket TCP via websockify.

Mais à propos de HTML5, pourquoi sont-ils appelés WebSockets s'ils ne sont pas des Sockets?

Les WebSockets sont un transport basé sur des sockets TCP. Après la prise de contact, il y a une surcharge très minime (généralement juste un en-tête de deux octets).

51
kanaka

Je ne peux pas améliorer les réponses de Kanaka à vos questions secondaires, et je sais que cette question a un an. Mais pour la question principale, Is there any way of doing a pure socket connection from a web browser, to enliven webpages? Il existe un projet appelé Java/JavaScript Socket Bridge qui pourrait être ce que vous (ou toute personne rencontrant cette page à partir d'une recherche Google) recherchez. L'avantage de cette méthode par rapport à ce que d'autres ont mentionné est qu'elle ne nécessite pas l'exécution d'un service côté client ou côté serveur. Ainsi, par exemple, si vous vouliez implémenter un client IRC uniquement en JavaScript mais que votre hébergeur ne vous accorde pas les droits suffisants pour proxyer la connexion, ceci Java = applet serait le chemin à parcourir. La seule préoccupation est de s'assurer que le client a Java installé et autorisé.

4
rojo

Vous pouvez simplement envoyer des données entre un client et un serveur avec WebSockets. En termes simples, la seule différence que WebSockets introduit est que le client:

  • ajoute des octets d'en-tête, comme le type de données et la longueur
  • ajoute des masques et encode les données en les utilisant

Le serveur doit également ajouter des octets d'en-tête, mais n'a pas besoin de coder les données.

Si vous implémentez le protocole correctement (côté serveur, c'est-à-dire que le navigateur a déjà une implémentation), vous pouvez l'utiliser facilement pour envoyer du texte et des données binaires. (Bien que la prise en charge du navigateur soit étroite, en particulier pour ce dernier.)

2
pimvdb

L'avantage de WebSocket est qu'il est basé sur HTTP. Vous pouvez également l'utiliser dans des environnements où des proxys http sont utilisés. Ainsi Websocket a une compatibilité d'infrastructure plus élevée que le TCP ordinaire.

De plus, http/WebSocket vous fournit certaines fonctionnalités que vous devrez sinon spécifier vous-même:

  • Réorienter
  • NAT keepalive
  • Multiplexage via URI
  • Encadrement
1
tobias

Si vous demandez que certaines données soient poussées du serveur, elles sont généralement appelées COMET ou Reverse Ajax.

Les sockets Web ne sont toujours pas très populaires car il existe des problèmes de pare-feu inhérents et une prise en charge minimale des navigateurs populaires.

Vous pouvez jeter un œil à http://www.ape-project.org/ car c'est l'une des implémentations les plus populaires (mais native pour unix/linux uniquement pour le moment. Pour les fenêtres, ils suggèrent d'utiliser une boîte virtuelle ou une implémentation basée sur vmware)

0
Muthu