2015-04-09 10 views
19

Was ich habe: Ein C++ - Anwendungsserver läuft, bereit, Daten an den Client zu senden, der eine HTML5-Seite oder App sein soll.Wie mit UDP-Sockets mit HTML5 zu sprechen?

Was ich will: Gibt es eine Möglichkeit zur Kommunikation mit UDP-Port mit HTML5 gegeben sowohl C++ Server und HTML5 App sind lokal System?

Was ich weiß:

  • Wegen Sicherheitsbewusstsein, hat JS nicht UDP-Port-Kommunikation vom Browser ermöglichen.
  • Haben an vielen Stellen gelesen, Antwort ist nein. Aber Antworten sind alt.

Ist die Antwort immer noch "NEIN"?

Gibt es eine mögliche Umgehung?

Jede Leitung wird geschätzt.

+0

Chrome-Apps haben so etwas in einer API, denke ich. Kannst du außer udp etwas aus C++ verwenden, wie zum Beispiel SSE? – dandavis

+1

Mit html5 Antwort ist immer noch "NEIN". Websocket ist immer tcp. Webrtc unterstützt TCP/UDP hängt von der Firewall ab, aber im Grunde ist es für die Pear-to-Pear-Kommunikation. Wenn Sie webrtc verwenden möchten, müssen Sie webrtc auf Ihrem Server implementieren – Samir

+0

Kurze Antwort Nein. Ich würde dies einfach als ein Duplikat der vielen Male schließen, die hier schon einmal gefragt wurden, aber die Antworten anderswo sind überraschend schlecht. Die Sicherheitsprobleme sind eher übertrieben - es wäre trivial, Amplifikationsangriffe zu verhindern, die sich mit DNS und NTP als problematisch erwiesen haben.Die Gründe, die mir bekannt sind, sind: 1) es ist nicht notwendig für die meisten, was ein Browser derzeit 2) ist sehr schwierig, über das Internet wegen NAT zu implementieren. – symcbean

Antwort

12

Ja, die Antwort ist immer noch "Nein". Websockets sind TCP-basiert. Beachten Sie, dass ein WebSocket keine reine TCP-Verbindung ist. Es gibt eine HTTP-Aushandlung und ein Framing-Protokoll. Sie können also auch keine einfache TCP-Verbindung in Javascript erstellen.

WebRTC basiert auf UDP, ist es Ihre Anwendungsfälle abdecken: http://www.html5rocks.com/en/tutorials/webrtc/datachannels/

+0

Danke für deine Zeit. Wird es auch einen Webserver brauchen? Wenn ich nicht falsch liege, muss ich das WebRTC-Protokoll auch in meiner C++ - Anwendung verwenden, richtig? – mkkhedawat

+3

Ja, WebRTC wird mehrere Dinge benötigen, um zu funktionieren, da es eine Peer-2-Peer-Technologie ist, benötigen Sie möglicherweise einen Zwischenserver für STUN/TURN/ICE, um die Kommunikation zwischen Peers zu initiieren. Es ist kein trivialer Ansatz, also gehen Sie durch die Dokumente, bevor Sie Entscheidungen treffen :) WebRTC ist nicht "die Art und Weise" UDP im Web zu verwenden, aber es verwendet UDP als Transport, damit es Ihren Anforderungen entspricht. – vtortola

5

Chrome scheint jetzt etwas zu haben: https://developer.chrome.com/apps/sockets_udp

+3

Hier kam eine andere Frage. Es ist klar, dass diese API nur für Chrome-Apps/-Erweiterungen verfügbar ist. Sie können es nicht von einer Webseite aus verwenden. –

+1

und Chrome-Apps sind [wird eingestellt werden] (https://blog.chromium.org/2016/08/from-chrome-apps-to-web.html) – James

0

Sie möglicherweise eine Arbeit um, entwerfen ein Programm/Skript/Server nutzen könnten (Ich würde PHP verwenden, ein HTML-Client zu sein, um das UDP-Gramm vom Server zu bekommen, wenn Sie möchten, dass ich helfen konnte, habe ich an etwas ähnlichem gearbeitet.

+0

Server wird mit HTML-Client über HTTP oder Websockets, beide sprechen sind TCP-basiert. Es würde meine Absicht besiegen. – mkkhedawat

0

Sie könnten alternativ einen zusätzlichen lokalen Python-Server für die Überbrückung der Daten zwischen Ihrer C++ - Anwendung und Webseite erstellen.

Die html5-Webseite stellt eine Verbindung zu einem lokalen Port her, der eine Web-Socket-Verbindung zulässt (verwenden Sie Flask/Tornado).

Die C++ - Anwendung verbindet sich mit einem UDP-Listener an einem anderen Port. Siehe https://wiki.python.org/moin/UdpCommunication zum Einrichten.

Der Python-Server bildet im Grunde eine transparente Datenbrücke zwischen UDP-Port zu Websocket-Verbindung.

+0

Warum speziell Python? Warum braucht man einen Zwischenserver? – Alejandro