Socket.io работает на локальном хосте, но не на Heroku - PullRequest
1 голос
/ 26 февраля 2020

Мне удалось заставить сокеты работать на моем LocalHost, однако при загрузке в Heroku я получаю следующие ошибки:

Журналы Heroku:

2020-02-26T19:18:12.223451+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=N22xsN8" host=evening-beach-84352.herokuapp.com request_id=9e085385-d06d-42f8-a02b-741ebdb50139 fwd="99.239.140.92" dyno=web.1 connect=1ms service=7ms status=200 bytes=1156 protocol=https
2020-02-26T19:18:16.268249+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=N22xtMN" host=evening-beach-84352.herokuapp.com request_id=560a1283-e9ad-4f98-b65d-c98e3af0d989 fwd="99.239.140.92" dyno=web.1 connect=1ms service=7ms status=200 bytes=1156 protocol=https
2020-02-26T19:18:16.340518+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=N22xtNI" host=evening-beach-84352.herokuapp.com request_id=0747c99f-bfa7-4a48-9dc9-396237ea4afd fwd="99.239.140.92" dyno=web.1 connect=1ms service=17ms status=404 bytes=417 protocol=https
2020-02-26T19:18:16.345722+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=N22xtNd" host=evening-beach-84352.herokuapp.com request_id=c28aa30e-c33f-4d2b-809d-7f723c9ad2f8 fwd="99.239.140.92" dyno=web.1 connect=1ms service=11ms status=200 bytes=1156 protocol=https
2020-02-26T19:18:16.394512+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=N22xtOS" host=evening-beach-84352.herokuapp.com request_id=93635a58-6c21-4d1a-81b4-ba67c712bc4a fwd="99.239.140.92" dyno=web.1 connect=1ms service=3ms status=404 bytes=417 protocol=https
2020-02-26T19:18:18.146871+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=N22xtpq" host=evening-beach-84352.herokuapp.com request_id=8dc8077a-5719-4f97-bd60-dc2f9585efea fwd="99.239.140.92" dyno=web.1 connect=1ms service=5ms status=200 bytes=1156 protocol=https
2020-02-26T19:18:18.104971+00:00 heroku[router]: at=info method=GET path="/socket.io/?EIO=3&transport=polling&t=N22xtp6" host=evening-beach-84352.herokuapp.com request_id=1a135498-5911-4757-90a6-52f22188b3ae fwd="99.239.140.92" dyno=web.1 connect=1ms service=8ms status=200 bytes=1156 protocol=https
2020-02-26T19:18:18.174618+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=N22xtqB" host=evening-beach-84352.herokuapp.com request_id=dce824bb-5243-45be-bd9b-5be3026412ac fwd="99.239.140.92" dyno=web.1 connect=1ms service=3ms status=404 bytes=417 protocol=https
2020-02-26T19:18:18.235090+00:00 heroku[router]: at=info method=POST path="/socket.io/?EIO=3&transport=polling&t=N22xtr2" host=evening-beach-84352.herokuapp.com request_id=44dbc61d-5e40-4283-b602-77107c20bdcd fwd="99.239.140.92" dyno=web.1 connect=1ms service=7ms status=404 bytes=417 protocol=https

Журналы консоли браузера:

polling-xhr.js:271 POST https://evening-beach-84352.herokuapp.com/socket.io/?EIO=3&transport=polling&t=N22yWHd 404 (Not Found)

У меня настроен код на стороне клиента:

import socketIOClient from "socket.io-client";

const socket = socketIOClient("https://evening-beach-84352.herokuapp.com/")

А вот мой код на стороне сервера:

const server = require('http').Server(app);
const socketIO = require('socket.io')
const io = socketIO(server, { origin: "*:*" });

const PORT = process.env.PORT || 8080;

Ответы [ 3 ]

0 голосов
/ 27 февраля 2020

Вы можете попробовать использовать CDN клиента сокета io:

import socketIOClient from "https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js";

или изменить путь клиента сокета на root:

const socket = socketIOClient("/");

0 голосов
/ 28 февраля 2020

Я только недавно начал использовать Heroku и только что добавил socket.io в свое приложение и вижу похожие ошибки. Вчера они ушли, сегодня они вернулись. У меня есть две вкладки в моем браузере 1 работает, другая не ...

Разница: http против https

Когда вы нажимаете на ссылку в Heroku, чтобы перейти к вашему приложению, она перемещается на https://myapp.herokuapp.com, но если я вручную перейду к http://myapp.herokuapp.com, внезапно все ошибки go исчезнут.

Теперь я хотел бы узнать причину, почему один работает, а другой нет ...

0 голосов
/ 26 февраля 2020

Включили ли вы сессионную привязку в вашем приложении? Из статьи поддержки :

Приложения, использующие Socket.io, должны включать сессионную привязку. Если вы планируете использовать модуль Node's Cluster или масштабировать свое приложение до нескольких динам, вы также должны следовать инструкциям Socket.io для нескольких узлов.

heroku features:enable http-session-affinity
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...