Javascript Apollo订阅-使用subscribeToMore处理WS-Disconnect
我一直在寻找一种方法来处理Apollo订阅的React应用程序中的web套接字断开连接,但还没有找到这样做的方法。我在apollo文档中看到的其他示例显示了以下捕获重新连接的方法:Javascript Apollo订阅-使用subscribeToMore处理WS-Disconnect,javascript,websocket,graphql,apollo,Javascript,Websocket,Graphql,Apollo,我一直在寻找一种方法来处理Apollo订阅的React应用程序中的web套接字断开连接,但还没有找到这样做的方法。我在apollo文档中看到的其他示例显示了以下捕获重新连接的方法: const wsClient = process.browser ? new SubscriptionClient(WSendpoint, { reconnect: true, }) : null; const wsLink = process.browser ? new WebSocketLi
const wsClient = process.browser ? new SubscriptionClient(WSendpoint, {
reconnect: true,
}) : null;
const wsLink = process.browser ? new WebSocketLink(wsClient) : null;
if (process.browser) {
wsLink.subscriptionClient.on(
'reconnected',
() => {
console.log('reconnected')
},
)
}
上述方法存在两个问题:
在阿波罗组件的
查询
或订阅
中是否有一种方法能够捕获此事件并从组件中相应地处理它?我可以想到几种方法来处理这些情况,但它们都不是一次性解决方案,每个情况都需要独立处理
在线/离线侦听器()
isOnline
,它可以保存应用程序状态的全局引用。无论何时触发上述两种方法,都可以更新isOnline
isOnline
来处理每个组件的网络状态。这可用于处理网络错误消息,在网络恢复后刷新组件李>
您可以使用来自
subscriptions-transport-ws
的SubscriptionClient
回调,如下所示:
const-ws=require(“ws”);
const{SubscriptionClient}=require(“订阅传输ws”);
const{WebSocketLink}=require(“阿波罗链接ws”);
const{apollo客户端}=require(“apollo客户端”);
const{InMemoryCache}=require(“apollo缓存inmemory”);
const subClient=新订阅客户端(
'ws://localhost:4000/graphql',
{重新连接:true},
ws
);
子客户端onConnected(()=>{console.log(“onConnected”)});
子客户端.onReconnected(()=>{console.log(“onReconnected”)});
子客户端.onReconnecting(()=>{console.log(“onReconnecting”)});
子客户端onDisconnected(()=>{console.log(“onDisconnected”)});
subClient.onError(error=>{console.log(“onError”,error.message)});
const wsLink=新的WebSocketLink(子客户端);
const客户端=新客户端({
链接:wsLink,
缓存:新的InMemoryCache()
});
我在Node.js中使用它,但它可能也适用于React