Я знаю, что можно использовать apollo-link-ws
для обработки подписок на стороне клиента. Также я создал клиента, который использует стандартные http
для запуска Queris
и Mutations
и использует WebSocket
для subscriptions
. Но мне нужно Pub
(излучать) некоторые данные на сервер через веб-сокет тоже. Таким образом, способ использует только apollo-link-ws
для всех действий (Query, Mutation). Но возможно ли принять решение, какой Query использует Websocket, а какой - стандартный HTTP-клиент?
import { ApolloClient } from 'apollo-client';
import { getMainDefinition } from 'apollo-utilities';
import { split } from 'apollo-link';
import { createUploadLink } from 'apollo-upload-client';
import { WebSocketLink } from 'apollo-link-ws';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { ApolloProvider } from 'react-apollo';
const uploadLink = createUploadLink({
uri:`http://localhost:8899/graphql`,
credentials: 'include'
});
const wsLink = new WebSocketLink({
uri: `ws://localhost:8899/graphql`,
options: {
reconnect: true,
timeout: 120000,
}
})
const client = new ApolloClient({
link: split(
// split based on operation type
({ query }) => {
const definition = getMainDefinition(query);
console.table(definition);
return (
definition.kind === 'OperationDefinition' &&
definition.operation === 'subscription'
);
},
wsLink,
uploadLink),
cache : new InMemoryCache(),
});
И я передаю клиента ApolloProvider
.