2017-04-10 78 views
0

我是nodeJs.New的新手,請問一些愚蠢的問題。當在iisnode上部署nodejs webapp時,Socket get net :: ERR_CONNECTION_TIMED_OUT

我想用iisnode在Azure服務器上部署實時聊天室webapp。 webapp在localhost上運行良好,但是當我將它上載到服務器上運行時,套接字無法從客戶端連接到服務器。我正在使用nodejs + express + jade。

server.js 
var express = require("express"), http = require('http'); 
var app = express(); 
var server = http.createServer(app); 
var port = process.env.PORT || 3700; 
app.set('views', __dirname + '/tpl'); 
app.set('view engine', "jade"); 

app.engine('jade', require('jade').__express); 

var deployPath = process.env.deployPath || ""; 

app.get(deployPath+ "/", function(req, res){ 
    res.render("page",{deployPath: deployPath}); 
}); 

app.use(deployPath, express.static(__dirname + '/public')); 


var io = require('socket.io')(server); 
server.listen(port, 'http://visafe-paltform.cloudapp.net'); 
io.sockets.on('connection', function (socket) { 
    console("connected"); 
    socket.emit('message', { message: 'welcome to the chat' }); 
    socket.on('send', function (data) { 
     io.sockets.emit('message', data); 
    }); 
}); 

console.log("Listening on port " + port); 


Client.js 


window.onload = function() { 

    var messages = []; 
    var address = window.location.protocol + '//' + window.location.host; 
    console.log(address); 
    var details = { 
     resource: (window.location.pathname.split('/').slice(0, -1).join('/') + '/socket.io').substring(1) 
    }; 
    console.log(details); 

    //var socket = io.connect(address, details); 
    var socket = io.connect('http://visafe-paltform.cloudapp.net:3700'); 
    //var socket = io.connect(); 
    var field = document.getElementById("field"); 
    var sendButton = document.getElementById("send"); 
    var content = document.getElementById("content"); 

    socket.on('message', function (data) { 
     if(data.message) { 
      messages.push(data.message); 
      var html = ''; 
      for(var i=0; i<messages.length; i++) { 
       html += messages[i] + '<br />'; 
      } 
      content.innerHTML = html; 
     } else { 
      console.log("There is a problem:", data); 
     } 
    }); 

    sendButton.onclick = function() { 
     var text = field.value; 
     console.log("click:", field.value); 
     socket.emit('send', { message: text }); 
    }; 

} 

當我嘗試請求的URL,它給我的錯誤:

socket.io.js:4948 GET http://visafe-paltform.cloudapp.net:3700/socket.io/?EIO=3&transport=polling&t=LjM71Yc net::ERR_CONNECTION_TIMED_OUT 

誰能幫助我?提前致謝。

+0

@ Walter-MSFT是的它是 –

+0

@ Walter-MSFT Windows服務器2012R –

+0

您是否在Windows防火牆和Azure NSG上打開端口3700?根據你的錯誤日誌,似乎防火牆阻止你的服務器。 –

回答

0

對於傳統的虛擬機,您應該打開Azure Endpoint和Windows防火牆上的端口3700。

有關如何在端點上打開端口的更多信息,請參閱此link

如果您想使用公網IP訪問您的服務,請確保您的服務正在偵聽0.0.0.0,並且您的虛擬機上的telnet 127.0.0.1 3700成功。

+0

相當有幫助的答案,謝謝:) –