Nano Hash - криптовалюты, майнинг, программирование

session.id меняется, а socket.io не совпадает

Я запускаю webpack-dev-server на локальном хосте: 8000 для своего приложения и express+socket.io на порту 3000 для своего API. Я проксировал запросы к socket.io в webpack.config.js следующим образом:

devServer: {
    proxy: {
        '/socket.io': {
            target: 'http://localhost:3000',
            ws: true
        }
    }
}

Однако не только идентификаторы сеанса в экспрессе и socket.io не совпадают, идентификатор сеанса в экспрессе изменяется при каждом запросе:

Сервер:

let app = require('express')();
let session = require('express-session')({
    secret: 'panopticon',
    resave: true,
    saveUninitialized: true
});
let server = require('http').createServer(app);
let io = require('socket.io')(server);

//session middleware
app.use(session);
io.use(require('express-socket.io-session')(session, {
    autoSave: true
}));

let i=0;

app.get('/socket.io', (req, res) => {
    console.log(i++, req.session.id);
    //0 'ShgnU91kCZzC7xHP9B57ZtsCbwi3XjdB'
    //1 'qLsYYpRZXpyoUrcKzF6K7uoAIKtE9oCh'

    res.send();
});

io.on('connection', socket => {
    console.log(socket.handshake.session.id);
    //MRUYZMVstMh6ssNrq9LP-Z4vTaT5SZcs
});

Клиент:

//connect to socket
let socket = io();
//make two requests to /socket.io
fetch('socket.io').then(() => fetch('socket.io'));

Ответы:


1

Единственный способ заставить это работать - сначала выполнить запрос AJAX к localhost:3000:

fetch('http://127.0.0.1:3000', {
    credentials: 'include'
});

Со следующим обработчиком ответа:

app.use('/', (req, res) => {
    res.header('Access-Control-Allow-Origin', 'http://127.0.0.1:8080');
    res.header('Access-Control-Allow-Credentials', 'true');
    res.sendStatus(200);
});

GitHub Gist

27.05.2017
  • Привет, я думаю, что у меня похожая проблема. Не будете ли вы так любезны разместить свой код на git? 28.05.2017
  • @Freddie добавил Gist в ответ 28.05.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..