250 votes

Différence entre socket et websocket ?

Je construis une application web qui a besoin de communiquer avec une autre application en utilisant des connexions socket. C'est un nouveau territoire pour moi, donc je veux être sûr que prises sont différents de websockets . Il semble qu'ils ne soient similaires que sur le plan conceptuel.

Je pose la question parce que j'avais initialement prévu d'utiliser Django comme base pour mon projet, mais dans le post de SO que j'ai lié ci-dessus, il est très clair que les websockets ne sont pas possibles (ou du moins pas fiables, même avec quelque chose comme django-websockets) en utilisant la configuration préférée de Django (Apache avec mod_wsgi). Pourtant, j'ai trouvé d'autres posts qui importent négligemment le module socket de Python pour quelque chose d'aussi simple que saisir le nom d'hôte du serveur .

Ainsi :

  • Sont-ils vraiment différents ?
  • Y a-t-il une raison de ne pas utiliser Django pour un projet qui repose sur l'établissement de connexions par sockets avec un serveur extérieur ?

213voto

Pablo Santa Cruz Points 73944

Pour répondre à vos questions.

  1. Même s'ils réalisent (en général) des choses similaires, oui , ils son vraiment différente. Les WebSockets sont généralement utilisées par les navigateurs qui se connectent au serveur d'application par le biais d'un protocole similaire à celui des HTTP qui s'étend sur TCP/IP . Elles sont donc principalement destinées aux applications Web qui nécessitent une connexion permanente à leur serveur. D'autre part, les sockets simples sont plus puissants et plus génériques. Elles fonctionnent sur TCP/IP mais ils ne sont pas limités aux navigateurs ou aux HTTP protocole. Ils peuvent être utilisés pour mettre en œuvre n'importe quel type de communication.
  2. Non. Il n'y a pas de raison.

176 votes

Les WebSockets ne sont pas similaires à HTTP. Il s'agit de sockets normales avec un certain cadrage et une poignée de main compatible HTTP. La poignée de main compatible HTTP sert uniquement à autoriser les connexions WebSocket sur le même port qu'un serveur web (afin que le serveur web puisse les transférer), mais une fois la connexion établie, le serveur web n'est plus dans la boucle. Les WebSockets ne se limitent pas aux clients des navigateurs. Voir libwebsocket qui possède à la fois un client non navigateur et un serveur.

23 votes

OK. Je vois... Comme je ne peux pas supprimer cette réponse acceptée, je vous demande de bien vouloir l'éditer avec les informations correctes. Je vous remercie de votre attention.

4 votes

Vous pouvez créer des clients websocket et les utiliser en dehors des navigateurs. Le protocole websocket est HTTP 1.1 avec une connexion améliorée à "websocket".

30voto

Roger F. Gay Points 734

Les Websockets utilisent des sockets dans leur mise en œuvre. Les Websockets sont basées sur un protocole standard (actuellement en phase finale, mais pas encore définitif) qui définit une "poignée de main" de connexion et une "trame" de message. Les deux parties passent par la procédure de prise de contact pour accepter mutuellement une connexion et utilisent ensuite le format de message standard ("trame") pour transmettre des messages dans les deux sens.

Je suis en train de développer un cadre qui vous permettra de communiquer directement de machine à machine avec un logiciel installé. Il pourrait répondre à votre besoin. Vous pouvez suivre mon blog si vous le souhaitez : http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html

17voto

smwikipedia Points 5491

WebSocket n'est qu'un autre protocole au niveau de l'application sur le protocole TCP, tout comme HTTP.

Quelques extraits de Spring in Action 4> cités ci-dessous, en espérant qu'ils vous aideront à mieux comprendre WebSocket.

Dans sa forme la plus simple, une WebSocket est juste un canal de communication entre deux applications (sans qu'un navigateur soit nécessairement est impliqué)...La communication WebSocket peut être utilisée entre a applications mais l'utilisation la plus courante de WebSocket est de faciliter les opérations de communication entre une application serveur et une application basée sur un navigateur.

13voto

Alnitak Points 143355

Vous devez utiliser WebSockets (ou certains module de protocole similaire, par exemple tel qu'il est pris en charge par le plugin Flash), car une application de navigateur normale ne peut tout simplement pas ouvrir un socket TCP pur.

En Socket.IO disponible pour les node.js peut être d'une grande aide, mais notez qu'il est pas un module WebSocket à part entière.

Il s'agit en fait d'un module de communication plus générique qui peut fonctionner au sommet de divers autres protocoles de réseau, y compris les sockets Web et les sockets Flash.

Par conséquent, si vous souhaitez utiliser Socket.IO du côté du serveur, vous devez également utiliser leur code client et leurs objets. Il n'est pas facile de créer des WebSocket les connexions à un socket.io car il faudrait émuler leur protocole de messagerie.

1 votes

Pourquoi une application de navigation normale ne peut-elle pas simplement ouvrir un socket TCP pur, juste par curiosité ? Est-ce parce que javascript ne le supporte pas ?

2 votes

@AdamHughes oui, en grande partie. J'imagine que la plupart des spécialistes de la sécurité s'insurgeraient à l'idée que les navigateurs web ouvrent des connexions TCP arbitraires vers des endroits étranges sur l'internet.

3voto

Phil Hunt Points 66

En ce qui concerne votre question (b), sachez que la spécification Websocket n'a pas été finalisée. D'après le W3C :

Les personnes chargées de la mise en œuvre doivent savoir que cette spécification n'est pas stable.

Personnellement, je considère que les Websockets sont beaucoup trop avant-gardistes pour être utilisés à l'heure actuelle. Mais je les trouverai probablement utiles dans un an ou deux.

11 votes

Qu'en est-il aujourd'hui, 9 ans plus tard ?

0 votes

Je suis presque sûr qu'ils sont couramment utilisés aujourd'hui. De nombreux sites web disposent de fonctions de mise à jour en temps réel ou en direct alimentées par des websockets, bien que diverses bibliothèques clients offrent une fonctionnalité de "retour à l'interrogation" en cas d'absence de prise en charge par le serveur.

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