Is there a way to have a separate websocket server work alongside socket.io
on a different path?
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'));
The behavior I'm seeing is that, when a separate websocket server is created, socket.io
still functions properly, but will not uprade connections to a websocket and fails with the error (from chrome):
WebSocket connection to 'ws://localhost:2233/aaaaa/socket.io/?EIO=3&transport=websocket&sid=fx4pOT0cegz65JMCAAAB' failed: Invalid frame header
To be clear, if the websocket server line is omitted, socket.io
works properly.
My specific use-case is that a websocket server is created by the apollo-server-express
package when subscriptions are enabled. Is there a way to have socket.io
configured in a more friendly way? Or, I believe I can supply a websocket server for apollo to use instead of creating one... how would I create that?
Package versions for reproduction:
node 8.11.1
express 4.16.4
socket.io 2.1.1
ws 6.1.0