Подписка на graphql Не удалось подключиться к конечной точке websocket на эластичном beanstalk

У меня есть приложение graphql-yoga (сервер GraphQL), работающее на Elastic Beanstalk с Application Load Balancer. Я могу выполнять запросы и мутации. Но когда я попробовал Подписку с помощью GraphQL Playground, это не связано с приведенной ниже ошибкой. {ошибка: не удалось подключиться к конечной точке WebSocket wss: //domainname.com/subscriptions. Пожалуйста, проверьте правильность URL-адреса конечной точки. }

Я проверил, что приложение работает нормально локально, а также на динамометрическом стенде Heroku. Я проверил логи AWS CloudWatch. Запрос регистрируется с помощью [0mGET / subscriptions [33m404 [0m3.860 ms - 152 [0m




Ответы (2)


На самом деле у меня была такая же проблема, и я обнаружил, что она связана с тем, как запускался мой порт сервера и как у меня был настроен провайдер Apollo на моем FE. Обратите внимание, что ws не работал, и мне также требовалось, чтобы wss работал. Я не направлял что-либо на конкретный URL-адрес, как вы с /subscriptions. Вместо этого я просто использовал любой URI, который Heroku / localhost предоставил мне

Код сервера GraphQLServer:

const server = new GraphQLServer({
  typeDefs,
  resolvers,
  context: { pubsub, endpoint: "/" },
});

Начальный код сервера:

server.start(({ port }) => {
  console.log(`Server listening on ${port} for incoming requests`);
});

Конфигурация провайдера FE Apollo

const httpLink = new HttpLink({
  uri: "https://domainName.herokuapp.com,
});

const wsLink = new WebSocketLink({
  uri: "wss://domainName.herokuapp.com/",
  options: {
    reconnect: true,
  },
});

const splitLink = split(
  ({ query }) => {
    const definition = getMainDefinition(query);
    return (
      definition.kind === "OperationDefinition" &&
      definition.operation === "subscription"
    );
  },
  wsLink,
  httpLink
);

const client = new ApolloClient({
  link: splitLink,
  uri: "https://domainName.herokuapp.com",
  cache: new InMemoryCache({
    addTypename: false,
  }),
});

Надеюсь, это поможет вам и поможет вам двигаться вперед. я потратил полдня на то, чтобы разобраться. Я предполагаю, что для вас может быть такая же ситуация, но немного отличается от вашей ситуации. Удачного кодирования !!!

person Bobbylee Ingalls    schedule 12.11.2020

Я выяснил, что экземпляр EC2, подключенный с помощью Elastic Beanstalk, имеет конфигурацию Nginx по умолчанию. Я вручную изменил nginx.conf на

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

и это сработало. Подробнее

person hardik gol    schedule 30.11.2020