web-dev-qa-db-fra.com

Différence entre socket et websocket?

Je construis une application Web qui doit communiquer avec une autre application à l'aide de connexions socket. C’est un nouveau territoire pour moi, alors tenez à vous assurer que sockets sont différents de websockets . Il semble qu'ils ne sont que conceptuellement similaires. 

Poser la question, car au départ, j’avais prévu d’utiliser Django comme base de mon projet, mais dans le post SO que j'ai lié ci-dessus, il est clairement indiqué que les websockets ne sont pas possibles (ou du moins ne sont 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 publications qui importent sans le savoir le module de socket de Python pour quelque chose d'aussi simple que récupérer le nom d'hôte du serveur .

Alors: 

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

Pour répondre à vos questions.

  1. Même s’ils réalisent (en général) des choses similaires, oui , ils sont / vraiment différents. WebSockets s'exécute généralement à partir des navigateurs se connectant à Application Server via un protocole similaire àHTTPqui s'exécute via TCP/IP . Ils sont donc principalement destinés aux applications Web nécessitant une connexion permanente à son serveur. D'autre part, les sockets simples sont plus puissants et génériques. Ils fonctionnent sur TCP/IP mais ils ne sont pas limités aux navigateurs ou au protocoleHTTP. Ils pourraient être utilisés pour mettre en œuvre tout type de communication.
  2. Non, il n'y a pas de raison.
87
Pablo Santa Cruz

Les Websockets utilisent des sockets dans leur implémentation. Les Websockets sont basées sur un protocole standard (maintenant en appel final, mais pas encore définitif) qui définit une connexion "handshake" et un "frame" de message. Les deux parties passent par la procédure de négociation pour accepter mutuellement une connexion, puis utilisent le format de message standard ("frame") pour faire passer les messages dans les deux sens.

Je développe un framework qui vous permettra de communiquer directement machine à machine avec les logiciels installés. Cela pourrait vous convenir. Vous pouvez suivre mon blog si vous le souhaitez: http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html

13
Roger F. Gay

Vous devez utiliser WebSockets (ou certains modules de protocole similaires, pris en charge par le plug-in Flash, par exemple) car une application de navigateur classique ne peut tout simplement pas ouvrir un socket TCP pur.

Le module Socket.IO disponible pour node.js peut beaucoup aider, mais notez qu'il s'agit de pas un module WebSocket pur à part entière.

Il s'agit en fait d'un module de communication plus générique pouvant exécuter au-dessus de divers autres protocoles réseau, y compris WebSockets et Flash sockets.

Par conséquent, si vous souhaitez utiliser Socket.IO sur le serveur, vous devez également utiliser leur code client et leurs objets. Vous ne pouvez pas facilement établir une connexion WebSocket brute à un serveur socket.io car vous devez émuler leur protocole de messagerie.

9
Alnitak

WebSocket n'est qu'un autre protocole d'application au-dessus du protocole TCP, tout comme HTTP.

Certains extraits <Spring in Action 4> cités ci-dessous espèrent que cela pourra vous aider à mieux comprendre WebSocket.

Dans sa forme la plus simple, un WebSocket estjusteun canal de communication entre deux applications (aucun navigateur n'est nécessairement impliqué ) ... La communication WebSocket peut être utilisée entretous types de fichiers applications, mais l'utilisation la plus courante de WebSocket est de faciliter communication entre une application serveur et une application basée sur un navigateur.

4
smwikipedia

Concernant votre question (b), sachez que la spécification Websocket n’a pas été finalisée. Selon le W3C :

Les développeurs doivent savoir que cette spécification n'est pas stable.

Personnellement, j’estime que Websockets est trop lourd pour Edge. Bien que je les trouve probablement utiles dans un an ou deux.

2
Phil Hunt

Je blâme le nom "WebSocket". Ils sont différents à bien des égards. La seule chose commune qu'ils ont faite est qu'ils communiquent tous les deux en réseau.

sockets en python est simplement une bibliothèque d'implémentation de socket BSD, vous pouvez établir des connexions liées à TCP/IP. Alors que WebSocket s'appuie sur le protocole HTTP existant et "met à niveau" la connexion au protocole WebSocket, car il n'existe pas de moyen facile d'établir une connexion duplex en HTTP.

0
Teng-Jing Wang