it-swarm.com.de

Unterschied zwischen Steckdose und Steckdose?

Ich baue eine Web-App, die über Socket-Verbindungen mit einer anderen Anwendung kommunizieren muss. Dies ist Neuland für mich, also möchte ich sicher gehen, dass Sockets anders sind als Websockets . Es scheint, als wären sie nur konzeptionell ähnlich. 

Fragen, weil ich ursprünglich geplant hatte, Django als Grundlage für mein Projekt zu verwenden, aber in dem SO -Post, auf den ich oben verlinkt habe, wurde sehr deutlich, dass Websockets nicht möglich sind (oder zumindest nicht zuverlässig, selbst wenn etwas vorliegt) wie Django-Websockets) mit dem bevorzugten Django-Setup (Apache mit mod_wsgi). Ich habe jedoch andere Beiträge gefunden, die das Python-Socket-Modul zufällig für etwas so einfaches importieren, wie den Hostnamen des Servers abrufen .

So: 

  • Sind sie wirklich anders?
  • Gibt es einen Grund, Django nicht für ein Projekt zu verwenden, das auf dem Herstellen von Socketverbindungen mit einem externen Server beruht? 
118
Jonathon

Um Ihre Fragen zu beantworten.

  1. Obwohl sie (im Allgemeinen) ähnliche Dinge erreichen, ja, sind wirklich verschieden. WebSockets werden normalerweise von Browsern ausgeführt, die eine Verbindung zu Application Server über ein Protokoll wie HTTP herstellen, das über TCP/IP ausgeführt wird. Sie sind also in erster Linie für Webanwendungen gedacht, die eine permanente Verbindung zu ihrem Server benötigen. Auf der anderen Seite sind normale Sockel leistungsstärker und allgemeiner. Sie laufen über TCP/IP, sind jedoch nicht auf Browser oder HTTP Protokoll beschränkt. Sie könnten verwendet werden, um irgendeine Art von Kommunikation zu implementieren.
  2. Nein, es gibt keinen Grund.
108

Websockets verwenden bei ihrer Implementierung Sockets. Websockets basieren auf einem Standardprotokoll (jetzt im letzten Aufruf, aber noch nicht endgültig), das ein "Handshake" für eine Verbindung und ein "Telegramm" für eine Nachricht definiert. Die beiden Seiten durchlaufen die Handshake-Prozedur, um eine Verbindung gegenseitig zu akzeptieren und dann das Standardnachrichtenformat ("Frame") zum Weiterleiten von Nachrichten zu verwenden.

Ich entwickle ein Framework, mit dem Sie direkt mit installierter Software von Maschine zu Maschine kommunizieren können. Es könnte Ihrem Zweck entsprechen. Sie können meinem Blog folgen, wenn Sie möchten: http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html

13
Roger F. Gay

Sie müssten WebSockets verwenden (oder einiges ähnliches Protokollmodul, wie es zB vom Flash-Plugin unterstützt wird), da eine normale Browser-Anwendung ein reines TCP einfach nicht öffnen kann. Steckdose.

Das Socket.IO Modul, das für node.js verfügbar ist, kann viel helfen, beachte aber, dass es nicht ist = ein reines WebSocket-Modul für sich.

Tatsächlich handelt es sich um ein allgemeineres Kommunikationsmodul, mit dem über verschiedene andere Netzwerkprotokolle ausgeführt werden können, einschließlich WebSockets und Flash-Sockets.

Wenn Sie also _Socket.IO_ auf dem Server verwenden möchten, müssen Sie auch deren Clientcode und -objekte verwenden. Sie können keine einfachen WebSocket Verbindungen zu einem _socket.io_ Server herstellen, da Sie deren Nachrichtenprotokoll emulieren müssten.

10
Alnitak

WebSocket ist nur ein anderes Protokoll auf Anwendungsebene über das Protokoll TCP, genau wie HTTP.

Einige der unten zitierten Schnipsel <Spring in Action 4> hoffen, Sie können WebSocket besser verstehen.

In seiner einfachsten Form ist ein WebSocketnurein Kommunikationskanal zwischen zwei Anwendungen (nicht unbedingt ein Browser ist beteiligt) ... WebSocket-Kommunikation kann zwischenjeder Art von .__ verwendet werden. Anwendungen, aber die häufigste Verwendung von WebSocket ist die Erleichterung von Kommunikation zwischen einer Serveranwendung und einer browserbasierten Anwendung.

4
smwikipedia

Beachten Sie bei Ihrer Frage (b), dass die Websocket-Spezifikation noch nicht abgeschlossen ist. Nach dem W3C :

Die Implementierer sollten wissen, dass diese Spezifikation nicht stabil ist.

Persönlich halte ich Websockets für zu blutend, um sie derzeit zu verwenden. Obwohl ich sie wahrscheinlich in einem Jahr oder so nützlich finden werde.

2
Phil Hunt

Ich beschuldige den Namen 'WebSocket'. Sie unterscheiden sich in vielerlei Hinsicht. Das einzige, was sie taten, ist, dass sie beide Netzwerkkommunikation betreiben.

sockets in python ist nur eine Bibliothek der BSD-Socket-Implementierung. Sie können Verbindungen herstellen, die sich auf TCP/IP beziehen. Während WebSocket auf dem vorhandenen HTTP-Protokoll aufbaut und die Verbindung zum WebSocket-Protocal "aufrüstet", gibt es keine einfache Möglichkeit, eine Duplex-Verbindung in HTTP herzustellen.

0
Teng-Jing Wang