Node.js + Apache-https:// localhost:3000 / socket.io / ERR_CONNECTION_REFUSED

时间:2019-02-27 09:02:57

标签: javascript node.js apache sockets proxypass

我正在Node.js中实现一个简单的游戏。我有一个client.js用于我的客户端代码,一个server.js在远程服务器上运行,它们都使用套接字在端口3000

上进行通信

我还在端口80 上运行Apache,并在apache配置文件中使用ProxyPass将URL mywebsite.io/agario路由到我的nodejs服务器。

<Location /agario>
     ProxyPass http://localhost:3000/
     ProxyPassReverse http://localhost:3000/
</Location>

我还使用 cloudflare 将我的Web服务器167.179.xx.xx通过SSL的URL https://agario.mywebsite.io进行路由,以便可以使用HTTPS。

问题

当我尝试连接到我的网站https://agario.mywebsite.io/agario时,出现以下错误:

socket.io-1.4.5.js:1 GET https://localhost:3000/socket.io/?EIO=3&transport=polling&t=MakAMgZ net::ERR_CONNECTION_REFUSED

当我在代码中指定要连接到远程服务器时,我不清楚为什么我的客户端代码尝试连接到本地主机。可能我只是对如何运行node.js服务器感到困惑,因为这是我对Node.js和套接字的初次体验。

client.js

...
var socket;
socket = io.connect('https://agario.mywebsite.io/agario');
...

server.js

var app = express();
var server = app.listen(3000, listen);

// This call back just tells us that the server has started
function listen() {
  var host = server.address().address;
  var port = server.address().port;
  console.log('Example app listening at http://' + host + ':' + port);
}

app.use(express.static('public'));
var io = require('socket.io')(server);

io.sockets.on('connection',
  function(socket) {
    console.log("We have a new client: " + socket.id);

...

});

如果我错过了任何重要信息,请告诉我,我将更新我的问题,谢谢。

1 个答案:

答案 0 :(得分:3)

您的服务器正在侦听端口3000,并且您正在尝试通过443与之连接,您应该尝试执行类似的操作

socket.connect('https://ip:3000');

但是,如果您确定客户端使用的端口与服务器使用的端口相同,或者您具有端口转发功能,则尝试使用netcat来确保问题出在脚本而不是网络上配置:

nc -zv -w1 ip port