Использование сокетов с express в производственной среде (героку) - PullRequest
0 голосов
/ 11 марта 2020

При работе с localhost я использовал следующий код для реализации функций сокета:

На стороне сервера

var express = require('express');
var app = express();
const io = require('socket.io')(5000);

На стороне клиента

<script src="http://localhost:5000/socket.io/socket.io.js"></script>
<script>const socket = io.connect('http://localhost:5000');</script>

Приведенный выше код работал у меня локально. Ранее пытался использовать код, приведенный в официальной документации, но он не работал. Я получил сообщение об ошибке 404 при попытке загрузить файл socket.io. js, и на клиентской стороне было указано, что «io не определено». Этот код указан ниже -

на стороне сервера

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

на стороне клиента

<script src="/socket.io/socket.io.js"></script>
<script>var socket = io.connect('http://localhost');</script>

Теперь мне нужно разверните приложение в Heroku и не знаете, как выполнять функции сокета. Я попробовал оба вышеупомянутых способа, но ни один не работал в Heroku. Я получаю «ошибка 404» и «IO не определен». Код на стороне сервера написан в ./app.js, а код на стороне клиента - в ./public/index.html.

Как заставить функционировать этот сокет работать в Heroku и также почему официальный код даже не работает локально?

1 Ответ

0 голосов
/ 04 мая 2020

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

// Needed for Heroku serving
if (process.env.PORT > 0)
    port = process.env.PORT;
else
    port = 5000;

// create the express server (app) and the socket io server (io)
const app = express();
const server = app.listen(port, () => {
    console.log("Listening on port: " + port);
});
const io = require('socket.io')(server);

Клиентская сторона

const socket = socketIOClient('APPNAME.herokuapp.com:80');
socket.emit("MsgType", "Payload") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...