0

私は、Apollo Server、Sequelize(ORM用)、MySQL(DB)、Express(Web Server)を使用してGraphQLバックエンドを作成しました。Apollo Serverサブスクリプションが動作しない

私もサブスクリプションを追加しましたが、そこに問題があります。 websocketテスターを使用してWSエンドポイントに到達することさえできません。

誰かが自分のコードを確認して問題の原因を教えてもらえますか?私はドキュメント、他のstackoverflowの質問を見て、私は解決策を見つけることができません。

コード:私はあなたが2台のサーバーexpressサーバーとのWebSocketのための1つを使用するアプリケーションのための1つを作るために持っていると思う誰も

答えて

0

ためhttps://github.com/seklyza/graphqlsubscriptions

感謝。それはこのように見えるかもしれません。

GraphQL特急サーバー:サブスクリプションの

... 
 

 
graphQLServer = express(); 
 

 
const GRAPHQL_PORT = 4000; 
 

 
graphQLServer.use('/graphql', bodyParser.json(), graphqlExpress((request) => { 
 
    return { 
 
    schema: executableSchema, 
 
    }; 
 
})); 
 

 
graphQLServer.use('/graphiql', graphiqlExpress({ 
 
    endpointURL: '/graphql', 
 
})); 
 

 
graphQLServer.listen(GRAPHQL_PORT,() => { 
 
    console.log(`GraphQL Server is now running on http://localhost:${GRAPHQL_PORT}/graphql`); // eslint-disable-line no-console 
 
}); 
 

 
...

のWebSocketサーバー:

... 
 

 
const WS_PORT = 8080; 
 

 
const websocketServer = createServer((request, response) => { 
 
    response.writeHead(404); 
 
    response.end(); 
 
}); 
 

 
websocketServer.listen(WS_PORT,() => console.log(// eslint-disable-line no-console 
 
    `Websocket Server is now running on http://localhost:${WS_PORT}` 
 
)); 
 

 
const subscriptionManager = new SubscriptionManager({ 
 
    schema: executableSchema, 
 
    pubsub: pubsub, 
 
    setupFunctions: { /* your subscription channels */ }, 
 
}); 
 

 
subscriptionServer = new SubscriptionServer({ 
 
    subscriptionManager: subscriptionManager 
 
}, { 
 
    server: websocketServer, 
 
    path: '/', 
 
}); 
 

 
...

そして、あなたはので、いくつかを必要とします公開サブスクリプションサービスの場合は、pubSubを使用します。サーバーのファイルに含まれており、このようになりますされています

import { 
 
    PubSub 
 
} from 'graphql-subscriptions'; 
 

 
const pubsub = new PubSub(); 
 

 
export { 
 
    pubsub 
 
};

+0

私はまた、動作しなかった2台のサーバーを使用しました。私はもう一度試してみる... – shabenda

+0

ところで、私はどのようにGraphiQLでサブスクリプションサーバのURLを指定するのですか? – shabenda

+0

申し訳ありませんサブスクリプションサーバーを指定する方法がわかりません –

0

あなたにも、WSServerの作成と実行を担当するstartメソッドを実装し、いくつかのウェブソケットサーバーのラッパーを作成することができます我々はを持った後、それが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 }; 

を使用してSubscriptionServerを作成するよう3210は、私たちが今、あなたは、私が書いた二答えは、あなたがコードを見つけることができますindex.jsのような初期化ファイルにwebSocketServerWrapperをインポートし、単にwebSocketServerWrapper.start(PORT);

Hereを実行することができます今すぐ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; 

を実装することができ、作成しましたサンプルのサブスクリプションを作成し、どのように処理する必要があります。

+0

他の答えのコメントを見て、問題が何であるかを見てください。 – shabenda

+0

どのようにあなたのwsサーバーに接続しようとしますか? – piotrbienias

+0

すべてが現在動作しています。 – shabenda

関連する問題