WebSockets über eine 3G-Verbindung
Ich habe das Spiel mit Sockel.io, node.js und WebSockets, alle die ich bekommen kann fein arbeiten über eine wifi-Verbindung.
Allerdings, wenn ich zum testen eine WebSocket-fähigen app über eine 3G-Verbindung (auf meinem iPhone, zum Beispiel), dann wie es scheint, fallen wieder zurück an long-polling ist die einzige praktikable Lösung.
Mit Sockel.io-die Verbindung schlägt fehl mit "WebSocket-Verbindung ungültig oder Herkunft nicht verifiziert", bevor er zurück nach long polling.
Ich weiß nicht, ob WebSockets sind gedacht, um die Arbeit über 3G - hat jemand hatte Erfolg bekommen Sie, wie das funktioniert? Ich habe versucht eine Reihe von verschiedenen Methoden und die scheinen alle zu scheitern, das macht mich denken, dass ich bin versucht das Unmögliche.
InformationsquelleAutor der Frage suttree | 2011-04-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige Mobilfunkanbieter sind notorisch bekannt für die Einrichtung völlig gebrochen transparente proxies, die Sie gezwungen sind, zu passieren. Das ist ein echtes ärgernis, dass die WebSocket-Arbeitsgruppe hat sich mit seit Anfang. Das Protokoll wurde entwickelt, um sicherzustellen, dass es scheitern wird, sehr schnell in Gegenwart dieser Produkte, so dass Ihre Anwendung können Sie sofort wieder fallen zu anderen Methoden. Wenn Sie feststellen, dass es dauert eine lange Zeit zu erkennen, die Anomalie und fallen zurück, bitte melden Sie es der hybi-Arbeitsgruppe bei der IETF, so dass sich das Problem diagnostiziert und behoben werden.
Parallel dazu können Sie sich an Ihren Mobilfunkanbieter, und Fragen Sie Sie, wie Sie Zugang zu dem Netz, ohne Umweg über Ihre kaputten transparente proxies oder zumindest zu wissen, wenn Sie erwarten, um Ihre kaputten proxies behoben, die zur Unterstützung der HTTP-Spezifikationen erfüllt. Einige von Ihnen könnte Ihnen mehrere access-Optionen.
InformationsquelleAutor der Antwort Willy Tarreau
Willy Tarreau sagt, es ist gebrochen transparente proxies verwendet, die von den Mobilfunk-Betreibern. Ich bin sicher, es ist nicht exklusiv, um Sie entweder (corporate Unternehmens-firewalls zum Beispiel). Sie können dies umgehen, durch die Verwendung einer anderen port-Nummer (über die Mobilfunkbetreiber mindestens). Etwas anderes als port 80. Mit SSL könnte auch funktionieren, aber ich habe es noch nicht versucht.
Dann läuft man in Probleme mit den folk hinter firewalls blockieren alles außer den ports 80 & 443.
Schreiben Sie Ihre websockets app zu Blättern, die von port 80, und einigen anderen port auf jeden Verbindungsversuch, und Ihre host-hören Sie auf diesen zwei ports. Dann haben Sie eine gute chance, eine Verbindung zum server. Verwendung von iptables port UMLEITEN, wenn Ihr mit linux zu hören, zu zwei Schnittstellen gleichzeitig.
InformationsquelleAutor der Antwort FlappySocks
Können Sie Server-Sent Events - Protokoll anstelle von WebSockets.
SSE ist ein einfacher HTTP-kompatibel und können über proxies.
InformationsquelleAutor der Antwort Kornel
Hatte diesen gleichen Fehler mit einer schlechten web-socket-Verbindung über bestimmte Handy-Netze. Gelöst durch;
Bewegen Häfen: Umzug über server und client für websocket über den SSL-port (port 443)
Ping-keep-alive: periodisches Senden von "ping" Nachrichten vom client zum server alle X Sekunden, und warten auf ein "pong" zurück von server. Wenn server nicht geben "pong" zurück innerhalb von Y Sekunden, starten Sie die Verbindung auf dem client.
Umsetzung von (1) erhalten Sie auf dem besten Weg dorthin.
InformationsquelleAutor der Antwort Philip Fung