2016-04-08 2 views
0

Edit: Ответил нижеПочему мой сервер Node.js зависает с этим маленьким скриптом?

Новое в Node.js здесь, я действительно хочу знать, почему этот скрипт зависает навсегда, когда я пытаюсь подключиться к созданному серверу.

У меня было это происходит довольно часто, когда я пытаюсь создать сервер, и я не знаю, почему, как это, кажется, происходит с очень похожим кодом:

Узел Сценарий:

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> 

Если есть ошибка, то она должна завершить ответ, и если там не должно завершить ответ, или у него есть что-то делать с веб-сокет?

+0

Когда есть ошибка из '.readFile()', вы не выходите из функции обратного вызова, хотя я точно не знаю, как это повесит сервер. – Pointy

+0

Я отредактировал свой код, чтобы отразить текущий код. Имею ли я только 'response.end()' самостоятельно или 'response.end(); return false; ', ни решить проблему висит. Я подозреваю, что это проблема с веб-сокетом. –

+0

Я все еще думаю, что вы должны «вернуться», когда есть ошибка, но это, вероятно, не проблема. – Pointy

ответ

0

Проблема была с websocket.connect(). Socket.io использует io как глобальный объект в интерфейсе, а не websocket. Так должно было быть io.connect().

0

Попробуйте изменить то, как вы призываете socket.io:

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

websocket.on('connection', doStuff); 

Этот пример непосредственно следует из the docs on GitHub.

+0

Я уже пробовал это. Это не имело никакого значения. –

+0

Вы видите ошибки в своей консоли? –

Смежные вопросы