別の Websocket サーバー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'));
私が見ている動作は、別の websocket サーバーが作成された場合socket.io
でも適切に機能しますが、websocket への接続をアップグレードせず、(chrome から) エラーで失敗することです:
WebSocket connection to 'ws://localhost:2233/aaaaa/socket.io/?EIO=3&transport=websocket&sid=fx4pOT0cegz65JMCAAAB' failed: Invalid frame header
明確にするために、websocket server 行が省略されている場合、socket.io
正常に動作します。
apollo-server-express
私の具体的なユースケースは、サブスクリプションが有効になっているときにパッケージによって websocket サーバーが作成されることです。socket.io
より使いやすい方法で構成する方法はありますか? または、作成する代わりに apollo が使用する Websocket サーバーを提供できると思います...どのように作成しますか?
再現用のパッケージ バージョン:
node 8.11.1
express 4.16.4
socket.io 2.1.1
ws 6.1.0