Как сделать подписку graphql с помощью Absinthe (Elixir) и Urql? - PullRequest
0 голосов
/ 20 апреля 2020

Моя идея состояла в том, чтобы создать клиентское приложение с использованием response, urql и graphql api с использованием эликсира и абсента, но на данный момент все выглядит так, как будто они не очень хорошо играют вместе.

Есть ли способ на самом деле использовать Абсент подписки с любым другим клиентом, кроме Apollo? Я пытался использовать urql, но мне не удается подключиться через ws, получая следующую ошибку:

Ошибка подключения WebSocket к 'ws: // localhost: 4000 / socket / websocket': ошибка во время рукопожатия WebSocket : Отправлено непустой заголовок 'Se c -WebSocket-Protocol', но ответа не получено

Единственное, что я нашел до сих пор, что, по-видимому, связано с этой проблемой, - это абсент библиотеки / socket-apollo-link (https://github.com/absinthe-graphql/absinthe-socket/tree/master/packages/socket-apollo-link), но, очевидно, только для Apollo.

В своей неудачной попытке я сделал следующее:

import React from 'react'
import { Provider, Client, dedupExchange, fetchExchange, subscriptionExchange } from 'urql'
import { cacheExchange } from '@urql/exchange-graphcache'
import { SubscriptionClient } from 'subscriptions-transport-ws'

const DataProvider = ({ children }) => {
  const cache = cacheExchange({})
  const subscriptionClient = new SubscriptionClient('ws://localhost:4000/socket/websocket', {})
  const client = new Client({
    url: 'http://localhost:4000/api',
    exchanges: [
      dedupExchange,
      cache,
      fetchExchange,
      subscriptionExchange({
        forwardSubscription: operations => subscriptionClient.request(operations),
      }),
    ],
  })
  return <Provider value={client}>{children}</Provider>
}

export default DataProvider

This ' subscription-transport-ws 'Я нашел из учебника, и этот таинственный' / websocket 'в конце ws url был упомянут в некотором выпуске gh, но, похоже, он работает (прежде чем добавить, что в конце url не было ws) соединение вообще).

...