2017-02-23 122 views
-1

我有一个本地工作的node.js应用程序(带有websockets)。我ssh到我的远程服务器,并运行node server.js(我在本地做同样的事情)。我得到我的日志文本“连接并监听(端口)3000”。nodejs服务器不处理远程部署的请求

在本地运行时,我去https://localhost:3000。对于远程服务器,我似乎无法找到节点服务器处理请求的位置。我试过https://mydomainroot.com:3000https://mydomainroot/folder/containing/serverjs,以及该主题上的一些细微变化。

这些请求似乎都没有被我的节点服务器处理(它应该记录类似“收到的GET请求到/ main”)。套接字也没有响应。

我正在使用一个小的橙色托管,如果这件事。

我可以直接导航到main.html,但它不能解决websocket问题。

我最喜欢的预感与路由有关,但我已经没有想到接下来要看的地方了。帮帮我?

代码:

var path = require('path'); 
var express = require('express'); 
var app = express(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 


app.use(express.static(path.join(__dirname, 'public'))); 

app.get('/', function(req, res){ 
    console.log("Received request for /"); 
    res.sendFile('main.html', {root: __dirname + '/public'}); 
}); 

io.on('connection', function(socket) { 
    console.log("received socket connection"); 
    users.push(socket); 

    socket.on('disconnect', function() { 
    if (socket.player) 
     var data = "updates" 

     io.emit(data); 
    }); 

    socket.on('move', function(move) { 
     //send move to everyone except sender 
     io.emit("updates"); 
    } 

    }); 
}); // socket connection ends 

function start() { 
    http.listen(3000, function() { 
    console.log("connected and listening on 3000"); 
    start(); 

    }) 
}; 

function start() { 

    // this emits the game state to every connected socket 
    io.emit('Initial state'); 

    // this triggers end of turn 
    setTimeout(nextTick, 5000); 

} 

function nextTick() { 
    io.emit('updates'); 
    start(); 
} 

start(); 
+1

每[这个小橙子托管网站上的示例代码](https://help.asmallorange.com/index.php?/Knowledgebase/Article/View/286/1/getting-started-with-nodejs-on-看起来你可以同时运行nodejs和监听端口3000.我猜你的域名没有正确地连接到服务器运行的IP地址。您可以先查看您的nodejs服务器的IP地址和您的域的IP地址,然后查看它们是否相同。 – jfriend00

+0

您是否曾尝试在远程服务器上运行'curl localhost:3000'并查看它是否返回任何内容? –

+0

你去哪儿了?我们试图帮助你,你似乎已经消失了。 – jfriend00

回答

1

既然你硬编码到3000端口,你应该检查你的主机提供商实际上允许该端口进行访问。您可能必须配置您的防火墙以使该端口公开可用。