【发布时间】:2020-02-02 19:39:23
【问题描述】:
使用ws,Node.js WebSocket库,可以有multiple servers sharing a single HTTP/S server。
socket.io 可以做同样的事情吗?
我需要在同一个 HTTP 服务器上有两台 WebSocket 服务器,一台用于 socket.io,另一台用于 Apollo 订阅。我可以用 Websocket 服务器设置 Apollo 订阅服务器,但不能用于 socket.io,socket.io 只接受 HTTP 服务器。
我想这样做:
const socketioWsS = new WebSocket.Server({ noServer: true });
const graphqlWsS = new WebSocket.Server({ noServer: true });
const io = socketIo(socketioWsS, {
transports: ["websocket"]
});
server.on("upgrade", function upgrade(request, socket, head) {
const pathname = url.parse(request.url).pathname;
if (pathname === "/socket.io/") {
socketioWsS.handleUpgrade(request, socket, head, function done(ws) {
socketioWsS.emit("connection", ws, request);
});
} else if (pathname === "/graphql") {
graphqlWsS.handleUpgrade(request, socket, head, function done(ws) {
graphqlWsS.emit("connection", ws, request);
});
} else {
socket.destroy();
}
});
server.listen(config.app.port, () => {
...
new SubscriptionServer(
{
execute,
subscribe,
schema
},
{
server: graphqlWsS
}
);
});
它适用于 Graphql 订阅,但不适用于 socket.io。
【问题讨论】:
-
你不只是将服务器实例传递为shown in the docs吗?这不适用于 socket.io 服务器的多个实例吗?
标签: node.js websocket socket.io graphql ws