Ошибка в соединении с socket.io - «ID сессии неизвестен» - PullRequest
0 голосов
/ 24 октября 2019

У меня есть среда " Elastic Beanstalk " с масштабируемым сервером, на котором запущено 2 экземпляра Ec2.

В своем корне я предоставляю контент angular 7 с помощью PHP API (используя Codeigniter из папки API). У меня есть socket.io модуль чата в моей папке Node.

Я использую Nginx для настройки проекта Node и PHP в одной среде EB.

Я попробовал другие варианты, изменив свой файл Nginx .conf согласно некоторым исследованиям, но не смог решить проблему.

Здесь мой файл настроек Nginx .CONF для SOCKET.IO .

server {
    listen 80;
    server_name sub.domain.com;
    root   /var/app/current/node;
    location / {
      proxy_pass            http://127.0.0.1:3000;
      proxy_read_timeout    3600;
      proxy_connect_timeout 3600;
      proxy_redirect        off;
      proxy_set_header  Upgrade $http_upgrade;
      proxy_set_header  Connection "upgrade";
      proxy_set_header      X-Real-IP $remote_addr;
      proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header      X-Forwarded-Proto https;
      proxy_set_header      X-Forwarded-Port 443;
      proxy_set_header      Host $host;
    }   
}

My socket.io code.

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

var socketController = require('./socketController.js')

app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index.html');
});
var nsp = io.of('/namespace');
/**
 * Socket for chat message
 */
io.on('connection', function (socket) {
    socket.on('client_user_join', socketController.userJoin.bind(null, socket, nsp, io));
    socket.on('client_send_chat_message', socketController.sendChatMessage.bind(null, socket, nsp, io));
    socket.on('client_received_chat_message', socketController.receivedChatMessage.bind(null, socket, nsp, io));    
    socket.on('disconnect', socketController.disconnect.bind(null, socket));
});

http.listen(port, function () {
    console.log('listening on *:' + port);
});

Я получаю Session ID unknown на начальном рычаге и через несколько минут я получаю Сбой: Ошибка во время рукопожатия WebSocket: Неожиданный код ответа: 400

Моя ссылка для подключения к сокету

https://sub.domain.com/socket.io/?EIO=3&transport=polling&t=Mtzwcpj&sid=TSMAaNI0KxDuzcIEAA4s

Я уже попробовал следующий вариант.

Попробуйте подключить сервер сокетов, используя разные транспорты.
this.socket = io('https://sub.domain.com/namespace', {transports: ['websocket']});

На стороне AWS включите Stickiness до 1 дня.

Я не понимаю, блокирует ли это конфигурация Nginx, или я должен использовать Radis, чтобы исправить это, так как у меня запущены два экземпляра EC2.

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