2016-04-08 3 views
0

Edit: Beantwortet unterWarum hängt mein Node.js-Server mit diesem kleinen Skript?

Neu bei Node.js hier, ich möchte wirklich wissen, warum dieses Skript für immer hängt, wenn ich an den erstellten Server zu verbinden bin versucht.

Ich habe das oft genug geschehen musste, wenn ich einen Server erstellen bin versucht, und ich bin nicht sicher, warum, wie es mit sehr ähnlichen Code zu geschehen scheint:

Knoten Skript:

var http = require("http"); 
var file = require("fs"); 

var server = http.createServer(function(request, response) 
{ 
    file.readFile("chat.html", "UTF-8", function(error, content) 
    { 
     if(error) { console.error(error.stack); response.end(); } 
     response.writeHead(200, {"content-type" : "text/html"}); 
     response.end(content); 
    }); 
}).listen(1994, function(){console.log("Listening");}); 

var websocket = require("socket.io").listen(server); 

websocket.sockets.on("connection", function(socket) 
{ 
    socket.emit("message", {"message" : "Hello World"}); 
}); 

HTML:

<!DOCTYPE HTML> 
<html> 
    <head> 
     <title>Chat</title> 
     <meta charset="utf-8"> 
     <script src="/socket.io/socket.io.js"></script> 
     <script> 
      var socket = websocket.connect(); 

      socket.on("message", function(message) 
      { 
       console.log(message); 
      }); 
     </script> 
    </head> 
    <body> 
     <div>Socket file.</div> 
    </body> 
</html> 

wenn ein Fehler auftritt, dann sollte es die Reaktion beenden, und wenn es nicht ist, sollte die Reaktion beenden, oder es etwas mit dem Web-Socket zu tun?

+0

Wenn es einen Fehler von '.readFile()' gibt, beenden Sie die Callback-Funktion nicht, obwohl ich nicht sicher bin, wie genau das den Server hängen würde. – Pointy

+0

Ich habe meinen Code bearbeitet, um meinen aktuellen Code wiederzugeben. Ob ich nur 'response.end()' für sich selbst oder 'response.end(); return false; ', löst weder das hängende Problem. Ich vermute, dass es ein Problem mit dem Web-Socket ist. –

+0

Ich denke immer noch, dass Sie zurückkehren sollten, wenn es einen Fehler gibt, aber das ist wahrscheinlich nicht das Problem. – Pointy

Antwort

0

Das Problem war mit websocket.connect(). Socket.io verwendet io als globales Objekt im Frontend, nicht websocket. So sollte es gewesen sein io.connect().

0

Versuchen Sie, wie Sie socket.io sich berufen:

var websocket = require('socket.io')(server); 

websocket.on('connection', doStuff); 

Dieses Beispiel folgt direkt aus the docs on GitHub.

+0

Ich habe das schon probiert. Es machte keinen Unterschied. –

+0

Sehen Sie Fehler in Ihrer Konsole? –