2012-04-05 12 views
23

Ich versuche mit node.js und socket.io zu beginnen.
Ich habe eine sehr (sehr) einfache Client-Server-Test-Anwendung, und ich kann es nicht zur Arbeit bekommen.
Das System ist auf einem Windows-Rechner mit einem Apache-Server eingerichtet.
Der Apache läuft auf port 81 und die socket.io wird bis zu port 8001socket.io - 'connect' Event feuert nicht auf dem Client

Server zu hören - server.js

var io = require('socket.io').listen(8001); 

io.sockets.on('connection', function (socket) { 
    console.log('\ngot a new connection from: ' + socket.id + '\n'); 
}); 

Kunde - index.html

<!DOCTYPE html> 
<html> 
<head> 
    <title>node-tests</title> 
    <script type="text/javascript" src="http://localhost:8001/socket.io/socket.io.js"> </script> 
    <script type="text/javascript"> 
     var socket = io.connect('http://localhost', { port: 8001 }); 

     socket.on('connect', function() { 
      alert('connect'); 
     }); 

     socket.on('error', function (data) { 
      console.log(data || 'error'); 
     }); 

     socket.on('connect_failed', function (data) { 
      console.log(data || 'connect_failed'); 
     }); 
    </script> 
</head> 
<body> 

</body> 
</html> 

Nach dem Starten meines Servers mit node server.js ist die Standard (erwartete) Ausgabe wr itten auf die Server-Konsole:

info: socket.io started 

Wenn ich index.html im Browser öffnen (Chrom in meinem Fall - Test nicht auf anderem Browser) das folgende Protokoll die Serverkonsole geschrieben:

info: socket.io started 
debug: served static content /socket.io.js 
debug: client authorized 
info: handshake authorized 9952353481638352052 
debug: setting request GET /socket.io/1/websocket/9952353481638352052 
debug: set heartbeat interval for client 9952353481638352052 
debug: client authorized for 

got a new connection from: 9952353481638352052 

debug: setting request GET /socket.io/1/xhr-polling/9952353481638352052?t=1333635235315 
debug: setting poll timeout 
debug: discarding transport 
debug: cleared heartbeat interval for client 9952353481638352052 
debug: setting request GET /socket.io/1/jsonp-polling/9952353481638352052?t=1333635238316&i=0 
debug: setting poll timeout 
debug: discarding transport 
debug: clearing poll timeout 
debug: clearing poll timeout 
debug: jsonppolling writing io.j[0]("8::"); 
debug: set close timeout for client 9952353481638352052 
debug: jsonppolling closed due to exceeded duration 
debug: setting request GET /socket.io/1/jsonp-polling/9952353481638352052?t=1333635258339&i=0 
... 
... 
... 

In der Browser-Konsole erhalte ich:

connect_failed 

So scheint es, wie der Client den Server erreicht und versucht, eine Verbindung, und der Server den Handshake wird ermächtigt aber die 0.123.Ereignis wird nie im Client ausgelöst, stattdessen erreicht die Verbindungsmethode und max reconnection attempts und gibt connect_failed zurück.

Irgendwelche help \ insight zu diesem wäre hilfreich.

Danke

+7

Versuchen Sie es mit io.connect nur() es der ableiten kann URL und Port von der URL, auf der Sie sich befinden. Ich habe in der Vergangenheit Probleme mit Dingen in io.connect bekommen, die nicht so funktionieren, wie ich es von ihnen erwarte. –

+1

@kfiroo hast du irgendeine Lösung dafür bekommen? – Hackableweb

+0

@TimothyStrimple Danke Tim! ** Arbeite wieder an Heroku (Cedar) und localhost **! – AmpT

Antwort

0

Versuchen Sie Folgendes:

ändern

var socket = io.connect('http://localhost', { port: 8001 }); 

zu

var socket = io.connect('http://localhost:8001'); 
2

Veränderung im Frontend (Client):

var socket = io.connect(http://myapp.herokuapp.com);

zu

var socket = io.connect();

Nach vielen Stunden mit verschiedenen Clients (Chrome, Firefox-Browser und Phonegap app) handelt, die keine Verbindung zum Server registriert haben richtig (das heißt der Server registriert die Websocket-Verbindung erfolgreich in seinen Protokollen, aber das Frontend nicht registriert Verbindungsereignis), versuchte ich @ Timothy's Lösung aus den Kommentaren und jetzt funktioniert alles wieder auf heroku und auf localhost.

4
//Client side 
<script src="http://yourdomain.com:8001/socket.io/socket.io.js"></script> 
var socket = io.connect('http://yourdomain.com:8001'); 

//Server side 
var io = require('socket.io').listen(8001); 
io.sockets.on('connection',function(socket) { 
`console.log('a user connected');` 
}); 

Client-Seite: Der Client-Seite Code fordert die Client-Version von Socket-IO aus der gleichen Datei, die Ihnen Server-Seite socketIO gibt. Var-Socket verfügt nun über alle Methoden, die mit socketIO verfügbar sind, z. B. socket.emit oder socket.on

Server-Seite: wie Client-Seite, wodurch die socketIO-Methoden für den Einsatz unter Vario verfügbar gemacht werden.

+0

Willkommen bei StackOverflow. Könntest du bitte diesen Code ein wenig erklären? Es kann zukünftigen Besuchern helfen. –

+0

Dies ist die einfachste Art, eine Verbindung mit node.js herzustellen. –

0
// server 
var server = http.createServer(app).listen(8001); 

// client 
var socket = io.connect(); 
0

Versuchen Sie es mit diesen:

Server.js

var http = require("http").createServer(), io = require("socket.io").listen(http); 

http.listen(8001); 

io.sockets.on("connection", function(socket){ 
    console.log("Connected!"); 
    socket.emit("foo", "Now, we are connected"); 
}); 

index.html

<script src="http://localhost:8001/socket.io/socket.io.js"></script> 
<script> 
    var i = io.connect("http://localhost:5001"); 
    i.on("foo", function(bar){ 
     console.log(bar); 
    }) 
</script> 
Verwandte Themen