有没有办法让一个单独的 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 服务器行,则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