2012-04-10 5 views
5

Ich versuche herauszufinden, was ist falsch mit meinem Code/Einstellungen für eine Weile jetzt.Basisch möchte ich eine Nachricht vom Client an den Server senden . Folgendes funktioniert in allen Browsern außer FF (11) und Chrom (18.0.1025.152 m). HierSocket.io sendet keine Nachrichten an Knoten-Server in Chrome & Firefox

einige Informationen:

  1. Ich betreibe Node.js auf Windows 7 Enterprise 64-Bit-Maschine
  2. ich Apache verwenden, um die Seite von localhost
  3. Ich höre auf Port 8080 zu dienen mit Socket.io
  4. Es sieht aus wie Chrom und FF Rückfall auf xhr-Polling/JSONP-Polling statt über Sockets
  5. I Nachrichten vom Server drücken kann, aber ich kann nicht vom Client emittieren
  6. 012.351.

Server Code:

<!DOCTYPE html> 
<html lang="en"> 

<head> 
    <title>Hello World!</title> 
    <meta charset="utf-8"> 

    <script src="http://localhost:8080/socket.io/socket.io.js"></script> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
      var socket = io.connect('http://localhost:8080'); 
      $("#button").click(function() { 
       socket.emit('my event' ,"Hello World!"); 
      }) 
     }) 
    </script> 
</head> 

<body> 
<button type="button" id='button'>Send Message</button> 
</body> 

</html> 

Module Versionen:

var io = require('C:/Users/shlomis/node_modules/socket.io/lib/socket.io').listen(8080); 

io.sockets.on('connection', function (socket) { 
    socket.on('my event', function (msg) { 
     console.log("DATA!!!"); 
    }); 
}); 

ich keine Möglichkeit zu verlangen, ohne einen vollständigen Pfad

Client-Code finden konnte

C:\Users\shlomis>npm ls 
[email protected] C:\Users\shlomis 
├─┬ [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
└─┬ [email protected] 
    ├── [email protected] 
    ├── [email protected] 
    └─┬ [email protected] 
    ├─┬ [email protected] 
    │ └── [email protected] 
    ├── [email protected] 
    ├─┬ [email protected] 
    │ ├── [email protected] 
    │ └── [email protected] 
    └── [email protected] 

Knoten log:

C:\Users\shlomis>node C:\dev\wamp\www\AR\js\videoServer.js 
    info - socket.io started 
    debug - served static content /socket.io.js 
    debug - client authorized 
    info - handshake authorized 17502185141066845391 
    debug - setting request GET /socket.io/1/websocket/17502185141066845391 
    debug - set heartbeat interval for client 17502185141066845391 
    debug - client authorized for 
    debug - websocket writing 1:: 
    debug - setting request GET /socket.io/1/xhr-polling/17502185141066845391?t=1334041653716 
    debug - setting poll timeout 
    debug - discarding transport 
    debug - cleared heartbeat interval for client 17502185141066845391 

Chrom WS Anfrage (101 Switching Protocols): enter image description here

Chrom XHR Anfrage: enter image description here

Update: Iv'e hinzugefügt

socket.on('connect', function() { 
    console.log("connected"); 
}); 

Es feuert nie auf Chrom.

Also was könnte falsch sein? bitte helfen Sie aus :)

+0

Ich habe genau das gleiche Problem ... socket.emit ('Hallo') auf dem Client arbeitet in Safari, aber nicht in Firefox oder Chrome ... Sicherheitsbeschränkung vielleicht? Oder möglicherweise ein socket.io Bug. –

+0

Könnte es sich um die Richtlinie "same-origin" handeln, da der Fehler nur auftritt, wenn XHR verwendet wird? Versuchen Sie, ein einfaches XHR zu localhost zu machen: different-port-than-served-page, sehen Sie, ob Sie irgendwelche Sicherheitsausnahmen bekommen. –

+0

KEINE Sicherheitsprobleme, ich benutze jetzt http://faye.jcoglan.com/node.html (faye) für Sockets über Knoten JS und es funktioniert gut ... sieht aus wie ein socket.io Fehler für mich. –

Antwort

0

Ich glaube, Sie verwenden die falsche socket.io.js-Datei für den Client?

https://github.com/LearnBoost/socket.io-client/tree/master/dist

Sie diese Dateien in einem Ordner verwenden sollten, wenn Sie auf Ihrem Client-Seite Zeug haben, das heißt: ../js/socket.io.min.js

Über das Problem benötigen, verwenden Sie npm? gehen in die NodeJS Projektordner und führen Sie die folgenden Schritte aus:

npm install socket.io

dies dem node_modules Ordner in Ihrem Projektordner installieren sollte und durch eine require('socket.io'); tun sollten Sie in der Lage sein, das Modul zugreifen.

Wenn dies nicht funktioniert, haben Sie wahrscheinlich eine beschädigte Installation von Knoten.

PS: Verwenden Sie den gleichen Port für die Dateien? Sie scheinen nach der Datei socket.io auf Port 8080 zu suchen und dann eine Verbindung zu nodeJS auf Port 8080 für Socket-Verbindungen ...

versuchen Sie es mit einem anderen Port?

+0

Auch ich habe das gleiche Problem, es funktioniert nicht mit Firefox und Chrome, aber es funktioniert gut auf IE. Bitte helfen. – Shekhar