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

Posted

技术标签:

【中文标题】使用来自 apollo-link-ws 的 WebSocketLink 检查互联网连接【英文标题】:check for internet connectivity using WebSocketLink from apollo-link-ws 【发布时间】:2018-11-26 00:29:12 【问题描述】:

我正在尝试使用 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
);

【问题讨论】:

还有其他方法可以实现吗? (不使用ws) 【参考方案1】:

经过一番搜索,我发现我可以使用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);

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

【讨论】:

onConnected 从不为我开火。适合你吗?【参考方案2】:

如果你正在使用 React,我发现了这个不错的社区包 react-apollo-network-status

【讨论】:

以上是关于使用来自 apollo-link-ws 的 WebSocketLink 检查互联网连接的主要内容,如果未能解决你的问题,请参考以下文章

使用来自 Web 的 USB 令牌进行数字签名

使用 JSON 解析来自 Web 服务的浮点数

使用来自 WCF 服务的数据创建自定义共享点日历​​ Web 部件

解析来自 .Net Web 服务的 JSON 响应

尝试使用 HttpClient 上传文件时来自 Web Api 的 RequestEntityTooLarge 响应

如何使用 AutoCompleteTextView 并使用来自 Web API 的数据填充它?