2013-01-15 2 views
7

Diese Frage betrifft socket.io Versionen < 0.9.x. Neuere Versionen haben verschiedene Transporte und Methoden zum Einstellen von Transporten.node.js und socket.io. Transporttyp Konfiguration für Websocket?

Ich Test Knoten js und socket.io in zwei Wochen. als ich anfing, bekomme ich das Problem von socket.send(message) Funktion im Client. Ich kann keine Nachricht an den Server senden. Aber ich kann immer noch Nachrichten vom Server empfangen. Ich löste dieses Problem, als ich den Transport der Server-Seite konfigurierte:

Alles gut. Jetzt kann ich auch Nachrichten an den Server senden. Aber ich habe immer noch eine Frage, warum ich den Transport konfigurieren muss. Standard socket.io Verwendung websocket Transport wie diese Einstellung:

socket.set('transports', [ 
    'websocket' 
    , 'flashsocket' 
    , 'htmlfile' 
    , 'xhr-polling' 
    , 'jsonp-polling' 
]); 

so verwendet es websocket zunächst nicht XHR-Polling. Der Server kann jedoch keine vom Client gesendeten Nachrichten empfangen, wenn socket.send(msg) und sogar socket.emit(...) verwendet werden.

Also das Problem ist: Was unterstützt Websocket hier nicht? Browser oder node.js ... Es tut mir leid, aber ich habe so viele Seiten von Google gesucht und ich habe keine Antwort dafür gefunden.

Ich benutze node.js Version 0.8.16, Socket.io Version 0.9.13 und neueste Browser: Chrome, Firefox, Opera

Ich möchte websocket nicht XHR-Abfrage verwenden.

Antwort

5

Das ist seltsam, denn selbst wenn Websockets von Ihrer Serverkonfiguration nicht unterstützt werden, wählt socket.io die nächstbeste verfügbare Methode aus (in Ihrem Fall xhr-polling). Eigentlich sollten Sie diese Transporte nicht einmal einstellen müssen, da socket.io standardmäßig 'websocket' als primäre Methode verwenden wird. Dies kann auf ein anderes Problem hinweisen, möglicherweise mit Ihrem Code?

Was nicht unterstützt websockets ist definitiv nicht die Browser, die Sie verwenden, noch node.js natürlich. Dies hängt von Ihrer Serverkonfiguration ab.

Erste Kontrolle:

  1. Der Hafen Sie hören, in der Firewall geöffnet ist
  2. Ihr Webserver unterstützt WebSockets. Wenn Sie Apache verwenden und proxing Ihre Anfrage an eine interne IP: PORT wird websocket nicht funktionieren, wenn Sie so etwas wie apache-websocket oder pywebsocket

installieren Was schließlich mein Problem gelöst war zu hören Apache auf Port 80 zu sperren und mit node.js überwacht diesen Port. Hier ist die Antwort auf SO, die mir geholfen hat: https://stackoverflow.com/a/7640966/2347777