Я использую Apollo Server и Apollo Client.
Все отлично работает. Я настроил базовую подписку на сервер, которая работает как положено. Но когда я сохраняю файл на клиенте и перезагружаем сервер в режиме реального времени, он не подключается к ws (ошибка: соединение отклонено), а также обычное соединение http не подключается. Также (ошибка: соединение отказано)
После того, как я обновлю страницу вручную с помощью F5, она подключится.
В чем здесь проблема? (reconnect: true is set
) на соединении ws.
Вот как я инициализирую клиент Apollo:
const wsLink = new WebSocketLink({
uri: `ws://localhost:4000/graphql`,
options: {
reconnect: true,
reconnectionAttempts: 10000
}
});
// Create an http link:
const httpLink = new HttpLink({
uri: "http://localhost:4000/graphql"
});
const link = split(
// split based on operation type
({ query }) => {
const definition = getMainDefinition(query);
return (
definition.kind === "OperationDefinition" &&
definition.operation === "subscription"
);
},
wsLink,
httpLink
);
const client = new ApolloClient({
link,
cache: new InMemoryCache()
});
const rootEl = document.getElementById("root");
ReactDOM.render(
<ApolloProvider client={client}>
<App />
</ApolloProvider>,
rootEl
);
И вот как я инициализирую на стороне сервера:
const PORT = 4000;
const app = express();
app.use(
session({
secret: "testsecret",
resave: false,
saveUninitialized: false
})
);
app.use(cors({ credentials: true }));
app.use(passport.initialize());
app.use(passport.session());
const server = new ApolloServer({
typeDefs,
resolvers,
context: ({ req, res, connection }) => {
if (connection) {
return connection.context;
} else {
return buildContext({ User, Chat, req, res });
}
},
playground: {
settings: {
"request.credentials": "include"
}
}
});
server.applyMiddleware({ app, cors: true });
const httpServer = http.createServer(app);
server.installSubscriptionHandlers(httpServer);
httpServer.listen({ port: PORT }, () => {
console.log(
`Server is running on http://localhost:${PORT}${server.graphqlPath}`
);
console.log(`ws://localhost:${PORT}${server.subscriptionsPath}`);
});
Вот полный проект: https://github.com/SelfDevTV/graphql-simple-chat