2012-04-10 16 views
5

Sto cercando di capire cosa c'è di sbagliato con il mio codice/impostazioni per un po 'di tempo. Fondamentalmente voglio inviare un messaggio dal client al server . Il seguente funziona in tutti i browser eccetto FF (11) e cromato (18.0.1025.152 m).Socket.io non riesce a inviare messaggi al server Node su Chrome & Firefox

Ecco alcune informazioni:

  1. corro Node.js su Windows 7 Enterprise computer a 64 bit
  2. ho utilizzare Apache per servire la pagina dal localhost
  3. sto in ascolto sulla porta 8080 con socket.io
  4. sembra Chrome e FF fallback a XHR-polling/jsonp-polling invece di utilizzare i socket
  5. posso spingere i messaggi dal server, ma non può emettere dal client
  6. 012.351.

codice del server:

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!!!"); 
    }); 
}); 

non riuscivo a trovare un modo per richiedere, senza un percorso completo

Codice cliente:

versioni
<!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> 

Moduli:

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] 
log

Node:

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 

richiesta cromato WS (101 Protocolli di commutazione): enter image description here

richiesta cromo XHR: enter image description here

Aggiornamento: Iv'e aggiunto

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

Non si accende mai sul cromo.

Quindi cosa potrebbe essere sbagliato? per favore aiutatemi :)

+0

Ho esattamente lo stesso problema ... socket.emit ('hello') sul client funziona in safari, ma non in firefox o chrome ... Limitazione di sicurezza forse? O forse un bug socket.io. –

+0

Potrebbe essere la politica 'same-origin', poiché l'errore si verifica solo quando XHR viene utilizzato? Prova a creare un semplice XHR su localhost: pagina diversa dalla porta del servizio, vedi se ottieni qualche eccezione di sicurezza. –

+0

NESSUN problema di sicurezza, ora utilizzo http://faye.jcoglan.com/node.html (faye) per i socket sul nodo JS e funziona perfettamente ... mi sembra un bug socket.io. –

risposta

0

Credo che stai usando il file socket.io.js sbagliato per il client?

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

si dovrebbe utilizzare questi file in una cartella in cui avete il vostro roba sul lato client, vale a dire: ../js/socket.io.min.js

A proposito del problema richiede, stai usando NPM? andare nella cartella nodeJS progetto ed eseguire il seguente:

npm install socket.io

questo dovrebbe installare nella cartella node_modules all'interno della cartella del progetto e facendo un require('socket.io'); si dovrebbe essere in grado di accedere al modulo.

se questo non funziona, probabilmente si ha un'installazione corrotta del nodo.

PS: stai utilizzando la stessa porta per i file? sembra che tu stia cercando il file socket.io sulla porta 8080 e poi ti connetti a nodeJS sulla porta 8080 per le connessioni socket ...

provare ad usare un'altra porta?

+0

Anche io ho lo stesso problema: non funziona su Firefox e Chrome, ma funziona perfettamente su IE. Per favore aiutatemi. – Shekhar

Problemi correlati