2016-04-08 8 views
0

編集:ここでの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()。 falseを返します; '、どちらも問題を解決しません。私はそれがWebソケットの問題だと思う。 –

+0

私はまだあなたがエラーがあるときにあなたが 'return'するべきだと思っていますが、それはおそらく問題ではありません。 – Pointy

答えて

0

問題はwebsocket.connect()でした。 Socket.ioは、websocketではなく、フロントエンドのグローバルオブジェクトとしてioを使用します。だからそれはio.connect()だったはずです。

0

あなたがsocket.ioを起動する方法を変更してみてください:

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

websocket.on('connection', doStuff); 

この例では、the docs on GitHubから直接続きます。

+0

私はすでにそれを試みました。違いはありませんでした。 –

+0

コンソールにエラーが表示されますか? –

関連する問題