В моем приложении я использую socketio и nodejs. Я пытаюсь реализовать простое реализованное простое решение, которое передает данные клиенту и обновляет некоторые его части на стороне сервера.
Все идет хорошо, пока не переместится из IDE (phpstorm) в среду докера, когда веб-приложение не может подключиться к стороне сервера из-за блокировки CORS и невозможности установить соединение между webapp и backend.
- Webapp загружается в браузер без проблем, если он работает в Docker.
- Бэкэнд-сервер также работает без проблем с контейнером Docker и прослушивает входящий запрос с заданным портом и адресом (localhost).
Чего не хватает? Я пробовал Google несколько часов, и я должен сказать, что не знаю, чего еще не хватает в реализации на стороне сервера.
Серверная часть:
const io = require('socket.io');
.
.
const server = io.listen(prefs.configs.server.serverPort, {origins: "*:*", transport :[ 'websocket', 'polling', 'xhr']});
server.set('origins', '*:*');
// event fired every time a new client connects:
server.on("connection", (socket) => {...});
socket.io версия 2.3.0 какой самый новый
Сторона внешнего интерфейса (реагирует на приложение):
.
.
let mapMarkerLayers = {};
const api_url = process.env.REACT_APP_BACKEND_API_URL;
let socket = null;
//
if (api_url !== undefined) {
socket = socketIOClient(api_url);
} else {
console.log ("Backend url not defined, api calls not in use.");
}
.
.
if (socket) {
socket.on('markers:all', (cb) => {
this.addMarkers(cb);
});
// get all markers from backend to display on the map.
socket.emit("markers:fetch_all");
}
Я пробовал с другим видом в поле происхождения, но не повезло.
Результаты дляAPI-вызовы - это следующий вид в FF.
Запрос перекрестного источника заблокирован: Политика одинакового происхождения запрещает чтение> удаленного ресурса в http://localhost:5010/socket.io/?EIO=3&>transport=polling&t=MuddFxK. (Причина: запрос CORS не выполненуспеха).