2012-04-10 34 views
5

Próbuję od razu dowiedzieć się, co jest nie tak z moim kodem/ustawieniami. Zasadniczo chcę wysłać wiadomość od klienta do serwera . Poniższe działa we wszystkich przeglądarkach z wyjątkiem FF (11) i chrome (18.0.1025.152 m).Socket.io nie wysyła wiadomości do serwera węzłów w przeglądarce Chrome i Firefox

Oto kilka informacji:

  1. biegnę node.js na Windows 7 Enterprise maszyn 64-bitowych
  2. używam apache służyć strony z localhost
  3. słucham na porcie 8080 z socket.io
  4. To wygląda jak chrom i FF awaryjnej do XHR-wyborczym/jsonp-odpytywanie zamiast używać gniazd
  5. mogę popychają wiadomości z serwera, ale nie mogę emitować od klienta

kod serwera:

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

nie mogłem znaleźć sposób, aby wymagać bez pełnej ścieżki

kod klienta:

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

modułów wersjach:

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

Węzeł:

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 

prośba chrom WS (101 Protokoły Switching): enter image description here

prośba chrom XHR: enter image description here

Aktualizacja: Iv'e dodany

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

Nigdy nie uruchamia się na chromie.

Co może być nie tak? proszę pomóż :)

+0

Mam dokładnie ten sam problem ... socket.emit ("cześć") na kliencie działa w safari, ale nie w firefoxie czy chrome ... Może ograniczenie bezpieczeństwa? Lub prawdopodobnie błąd socket.io. –

+0

Czy może to być zasada "tego samego pochodzenia", ponieważ błąd występuje tylko wtedy, gdy XHR jest używany? Spróbuj wprowadzić prosty XHR na localhost: inny port niż obsługiwana strona, sprawdź, czy masz wyjątki bezpieczeństwa. –

+0

BEZ problemów bezpieczeństwa, teraz używam http://faye.jcoglan.com/node.html (faye) dla gniazd w węźle JS i działa dobrze ... wygląda jak błąd socket.io dla mnie. –

Odpowiedz

0

Wydaje mi się, że używasz niewłaściwego pliku socket.io.js dla klienta?

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

należy użyć tych plików w folderze gdzie masz swoje rzeczy po stronie klienta, czyli na: ../js/socket.io.min.js

O problemie wymaga, używasz KMP? przejdź do folderu projektu nodeJS i uruchom następujące:

npm install socket.io

ten powinien zainstalować w folderze node_modules wewnątrz folderu projektu i wykonując require('socket.io'); powinieneś być w stanie uzyskać dostęp do modułu.

jeśli to nie działa, prawdopodobnie masz uszkodzoną instalację węzła.

PS: Czy używasz tego samego portu dla plików? Wygląda na to, że szukasz pliku socket.io na porcie 8080, a następnie podłączasz się do nodeJS na porcie 8080 dla połączeń gniazd ...

spróbuj użyć innego portu?

+0

Nawet mam ten sam problem.Nie działa on w Firefoksie i Chrome, ale działa dobrze na IE. Proszę o pomoc. – Shekhar

Powiązane problemy