Сервер Heroku socket.io работает локально, но не где-либо еще - PullRequest
0 голосов
/ 13 мая 2019

В основном мой сервер socket.io работает только для ... одного компьютера, я полагаю.Работает, если я использую Chrome, Chrome incognito, 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 код заставил его работать в моем приложении heroku.Я выключил его, и сервер просто продолжает отправлять ошибку net :: ERR_CONNECTION_REFUSED.

1 Ответ

0 голосов
/ 27 мая 2019

Решение:

Использование mars/heroku-cra-node buildpack является обязательным.Он разделяет реагирующий пользовательский интерфейс и код сервера.Конфигурация порта: 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...