Vous pouvez créer une enveloppe de serveur socket web qui implémente la méthode start
qui sera responsable de la création et l'exécution du WSServer
, ainsi car il va créer un SubscriptionServer
avec l'utilisation de SubscriptionManager
// in subscription.js
import { PubSub, SubscriptionManager } from 'graphql-subscriptions';
const pubSub = new PubSub();
let subscriptionManagerOptions = {
schema: schema, // this is your graphql schema
setupFunctions: {
// here come your setup functions
},
pubSub: pubSub
};
const subscriptionManager = new SubscriptionManager(subscriptionManagerOptions);
export { pubSub, subscriptionManager };
Après nous avons le subscriptionManager
a créé, nous pouvons maintenant mettre en œuvre le WSServer
import { createServer } from 'http';
import { SubscriptionServer } from 'subscription-transport-ws';
import { subscriptionManager } from './subscription';
const webSocketServerWrapper = {
start: function(port){
const webSocketServer = createServer((request, response) => {
response.writeHead(404);
response.end();
});
webSocketServer.listen(port,() => {
console.log('WSServer listening on port ' + port);
});
new SubscriptionServer({
subscriptionManager,
onSubscribe: (message, options, request) => {
return Promise.resolve(Object.assign({}, options, {}));
}
}, webSocketServer);
}
};
export default webSocketServerWrapper;
Maintenant, vous pouvez importer le webSocketServerWrapper
dans le fichier d'initialisation comme index.js
et exécutez simplement webSocketServerWrapper.start(PORT);
Here, la deuxième réponse que j'ai écrit, vous pouvez trouver un code responsable de la création de l'exemple d'abonnement et de la façon dont il devrait être géré.
J'ai également fait cela en utilisant 2 serveurs qui ne fonctionnaient pas. Je vais réessayer ... – shabenda
A propos, comment spécifier dans GraphiQL l'URL du serveur d'abonnement? – shabenda
Désolé je ne sais pas comment spécifier le serveur d'abonnement –