Есть ли способ заставить отдельный сервер веб-сокетов работать вместе с socket.io
по другому пути?
let http = require('http');
let express = require('express');
let socketio = require('socket.io');
let websocket = require('ws');
let httpServer = http.createServer();
let expressApp = express();
httpServer.on('request', expressApp);
let socketioServer = socketio(httpServer, { path: '/aaaaa/socket.io/' });
socketioServer.of('/').on('connect', () => {});
let websocketServer = new websocket.Server({ server: httpServer, path: '/aaaaa/graphql' });
httpServer.listen(2233, () => console.log('started'));
Поведение, которое я вижу, заключается в том, что при создании отдельного сервера веб-сокетов socket.io
по-прежнему функционирует должным образом, но не обновляет подключения к веб-сокету и завершается с ошибкой (из chrome):
WebSocket connection to 'ws://localhost:2233/aaaaa/socket.io/?EIO=3&transport=websocket&sid=fx4pOT0cegz65JMCAAAB' failed: Invalid frame header
Для ясности, если строка сервера websocket отсутствует, socket.io
работает правильно.
Мой конкретный вариант использования заключается в том, что сервер веб-сокетов создается пакетом apollo-server-express
, когда подписки включены. Есть ли способ настроить socket.io
более удобным способом? Или я полагаю, что могу предоставить сервер веб-сокетов для использования Apollo вместо его создания ... как бы я это создал?
Варианты комплекта для воспроизведения:
node 8.11.1
express 4.16.4
socket.io 2.1.1
ws 6.1.0