Mysql 阿波罗服务器订阅不工作

Mysql 阿波罗服务器订阅不工作,mysql,sequelize.js,graphql,apollo-server,graphql-subscriptions,Mysql,Sequelize.js,Graphql,Apollo Server,Graphql Subscriptions,我使用Apollo服务器、Sequelize(用于ORM)、MySQL(DB)和Express(Web服务器)制作了一个GraphQL后端 我还添加了订阅,这就是问题所在。 我甚至无法使用websocket测试仪访问WS端点 有人能检查我的代码并告诉我问题出在哪里吗?我查看了文档和其他问题,但找不到任何解决方案 守则: 谢谢大家我想你必须制作两台服务器,一台用于使用express服务器的应用程序,另一台用于websocket。它可能看起来像这样 GraphQL express服务器: 。。。

我使用Apollo服务器、Sequelize(用于ORM)、MySQL(DB)和Express(Web服务器)制作了一个GraphQL后端

我还添加了订阅,这就是问题所在。 我甚至无法使用websocket测试仪访问WS端点

有人能检查我的代码并告诉我问题出在哪里吗?我查看了文档和其他问题,但找不到任何解决方案

守则:


谢谢大家

我想你必须制作两台服务器,一台用于使用
express
服务器的应用程序,另一台用于websocket。它可能看起来像这样

GraphQL express服务器:

。。。
graphQLServer=express();
常量图ql_端口=4000;
graphQLServer.use('/graphql',bodyParser.json(),graphqlExpress((请求)=>{
返回{
schema:executableSchema,
};
}));
graphQLServer。使用('/graphiql',graphiqlExpress({
endpointURL:“/graphql”,
}));
graphQLServer.listen(GRAPHQL_端口,()=>{
log(`GraphQL服务器现在正在http://localhost:${GRAPHQL_PORT}/GRAPHQL`);//eslint禁用行号控制台
});

我认为您必须制作两台服务器,一台用于使用
express
服务器的应用程序,另一台用于websocket。它可能看起来像这样

GraphQL express服务器:

。。。
graphQLServer=express();
常量图ql_端口=4000;
graphQLServer.use('/graphql',bodyParser.json(),graphqlExpress((请求)=>{
返回{
schema:executableSchema,
};
}));
graphQLServer。使用('/graphiql',graphiqlExpress({
endpointURL:“/graphql”,
}));
graphQLServer.listen(GRAPHQL_端口,()=>{
log(`GraphQL服务器现在正在http://localhost:${GRAPHQL_PORT}/GRAPHQL`);//eslint禁用行号控制台
});

您可以创建一些web套接字服务器包装器,该包装器实现了
start
方法,该方法将负责创建和运行
WSServer
,并使用
SubscriptionManager
创建
SubscriptionServer

//在subscription.js中
从“graphql订阅”导入{PubSub,SubscriptionManager};
const pubSub=新的pubSub();
让SubscriptionManagerProptions={
schema:schema,//这是您的graphql模式
设置功能:{
//这里是您的设置功能
},
pubSub:pubSub
};
const subscriptionManager=新的subscriptionManager(subscriptionmanagerations);
导出{pubSub,subscriptionManager};
创建了
subscriptionManager
之后,现在可以实现
WSServer

从“http”导入{createServer};
从“订阅传输ws”导入{SubscriptionServer};
从“./subscription”导入{subscriptionManager};
常量webSocketServerWrapper={
开始:功能(端口){
const webSocketServer=createServer((请求、响应)=>{
书面答复(404);
response.end();
});    
侦听(端口,()=>{
log('WSServer侦听端口'+端口);
});
新订阅服务器({
订阅管理器,
onSubscribe:(消息、选项、请求)=>{
返回Promise.resolve(Object.assign({},options,{}));
}
},webSocketServer);
}
};
导出默认webSocketServerWrapper;
现在,您可以在初始化文件中导入
webSocketServerWrapper
,如
index.js
,只需运行
webSocketServerWrapper.start(端口)


,这是我写的第二个答案,您可以找到负责创建示例订阅的代码以及应该如何处理它

您可以创建一些web套接字服务器包装器,该包装器实现了
start
方法,该方法将负责创建和运行
WSServer
,并使用
SubscriptionManager
创建
SubscriptionServer

//在subscription.js中
从“graphql订阅”导入{PubSub,SubscriptionManager};
const pubSub=新的pubSub();
让SubscriptionManagerProptions={
schema:schema,//这是您的graphql模式
设置功能:{
//这里是您的设置功能
},
pubSub:pubSub
};
const subscriptionManager=新的subscriptionManager(subscriptionmanagerations);
导出{pubSub,subscriptionManager};
创建了
subscriptionManager
之后,现在可以实现
WSServer

从“http”导入{createServer};
从“订阅传输ws”导入{SubscriptionServer};
从“./subscription”导入{subscriptionManager};
常量webSocketServerWrapper={
开始:功能(端口){
const webSocketServer=createServer((请求、响应)=>{
书面答复(404);
response.end();
});    
侦听(端口,()=>{
log('WSServer侦听端口'+端口);
});
新订阅服务器({
订阅管理器,
onSubscribe:(消息、选项、请求)=>{
返回Promise.resolve(Object.assign({},options,{}));
}
},webSocketServer);
}
};
导出默认webSocketServerWrapper;
现在,您可以在初始化文件中导入
webSocketServerWrapper
,如
index.js
,只需运行
webSocketServerWrapper.start(端口)


,这是我写的第二个答案,您可以找到负责创建示例订阅的代码以及应该如何处理它

我还使用了两台不起作用的服务器。我将再试一次…顺便问一下,我如何在GraphiQL中指定订阅服务器URL?抱歉,我不知道如何指定订阅服务器它仍然无法工作。我甚至无法使用websocket客户端连接到WS-server。看看GitHub上的新代码。你能试着更新
subsc吗