Heroku socket.io服务器在本地运行,但不在其他任何地方运行

时间:2019-05-12 22:20:51

标签: node.js sockets heroku websocket socket.io

基本上我的socket.io服务器只能用于..我想只有一台计算机。如果我使用Chrome,Chrome隐身浏览器,Edge,则可以使用。我尝试在同一个Wifi上同时通过手机使用该应用程序,这就是我遇到的问题。看起来socket.io当时无法正常工作。我觉得它仅适用于一个客户端(也许是IP,端口问题?)

我将socket.io与React js结合使用,哦,天哪,要使它们在本地和Heroku上都能正常工作还是很麻烦的。

这是我的服务器文件/src/server/index.js

const express = require("express");
const http = require("http");
const socketIo = require("socket.io");
const axios = require("axios");
const port = process.env.PORT || 4001; // Only this port works for some reason
const index = require("./routes/index");
const app = express();
const path = require('path');
const server = http.createServer(app);
const io = socketIo(server); // < Interesting!

io = socketIo.listen(app);

io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10);  // Recommended from online guys
});

app.use(express.static(path.join(__dirname, '../../index')));
app.get('/', (req, res, next) =>
  res.sendFile(index))

io.on("connection", socket => {
  console.log("New client connected");
})

server.listen(port, () => console.log(`Listening on port ${port}`));

我使用配置文件动态更改服务器,并且每次需要通过socket.io-client连接到套接字时都将其导入

let server = 'ws://XXXXXXXXXXXXX.herokuapp.com/socket.io/?EIO=4&transport=websocket';

const env = process.env.NODE_ENV;

if (env === 'development') {
    server = 'http://127.0.0.1:4001';
}

module.exports = server;

可能是什么问题?为什么只在我的根计算机上工作?测功机问题或其他问题? 我是heroku和socket.io的完整入门者,所以任何信息都将对您有所帮助。

**编辑:

我不确定,但是我觉得VS Code中运行的服务器使其可以在我的heroku应用中正常工作。我已将其关闭,服务器仅继续发送net :: ERR_CONNECTION_REFUSED错误。

1 个答案:

答案 0 :(得分:0)

解决方案:

必须使用mars/heroku-cra-node buildpack。它将react-ui和服务器代码分开。端口配置:const port = process.env.PORT || 4001, 客户监听:let server = window.location.hostname 为客户端提供一个单独的配置文件也很不错,该文件具有以下内容:

const env = process.env.NODE_ENV;
if (env === 'development') {
    server = 'http://localhost:4001';
}
module.exports = server;

那么您就不必在开发(VSCode)或生产环境(Heroku)中更改端口和服务器。