websocket - 使用来自 apollo-link-ws 的 WebSocketLink 检查互联网连接

标签 websocket graphql apollo apollo-client apollo-server

我正在尝试使用 apollo websockets 检查互联网连接,这样做的目的是在没有连接时显示“您已断开连接”消息以防止用户输入并假设更改已保存(更改应该是保存在类型上),这是 apollo-link-ws 设置的一部分

const wsLink = new WebSocketLink({
uri: `ws://${hostname}${port ? `:${port}` : ''}/subscriptions`,
options: {
 reconnect: true,
 connectionParams: () => ({
  authorization: localStorage.getItem('accelerator-token')
 })
}
});


    const hasSubscriptionOperation = ({ query: { definitions } }) =>
    definitions.some(
    ({ kind, operation }) =>
      kind === 'OperationDefinition' && operation === 'subscription'
  );

这是客户端配置:
const client = new ApolloClient({
link: ApolloLink.split(
    hasSubscriptionOperation,
    wsLink,
    ApolloLink.from([
      cleanTypenameLink,
      authMiddleware,
      errorLink,
      stateLink,
      createUploadLink()
    ])
  ),
  cache
});

最佳答案

经过一番搜索,我发现我可以使用 subscriptions-transport-ws 中的 SubscriptionClient

export const myClient = new SubscriptionClient(`ws://${hostname}${port ? 
`:${port}` : ''}/subscriptions`, {
 reconnect: true,
 connectionParams: () => ({
  authorization: localStorage.getItem('accelerator-token')
 })
});
myClient.onConnected(()=>{console.log("connected f client f onConnected")})
    myClient.onReconnected(()=>{console.log("connected f client f 
reconnected")})
myClient.onReconnecting(()=>{console.log("connected f client  f 
reconnecting")})
myClient.onDisconnected(()=>{console.log("connected f client  f 
onDisconnected")})
myClient.onError(()=>{console.log("connected f client  f onError")})
export const wsLink = new WebSocketLink(myClient);

这些方法可用于检测网络状态

关于websocket - 使用来自 apollo-link-ws 的 WebSocketLink 检查互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50887793/

相关文章:

javascript - 在功能组件之前添加 async 会导致它返回一个对象吗?

node.js - GraphQL 将输入参数传递给订阅

apollo - 如何执行异步提取请求,然后重试上一个失败的请求?

apache - 代理 websocket wss ://to ws://apache

ruby-on-rails - Rails API + AngularJS + Websocket-Rails gem

graphql - 在 Apollo 模式 :download 之后获取 "error: GraphQL schema file should contain a valid GraphQL introspection query result"

node.js - GraphQL:一个大查询与大量小查询

docker - 调用 puppeteer.connect() 时出现协议(protocol)错误

Websocket 反向隧道

mysql - 使用 Sequelize 从 MySQL 获取数据到 GraphQL 失败