Moralis 高级实时查询
高级连接
我们在适合大多数情况的标准连接中为您管理全局 WebSocket 连接。 但是,在某些情况下,您有多个 LiveQuery 服务器并希望连接到所有服务器,一个 WebSocket 连接是不够的。 我们已经针对此类场景公开了 LiveQueryClient。
实时查询客户端
LiveQueryClient 是标准 WebSocket 客户端的包装器。 我们添加了几种有用的方法来帮助您连接/断开与 LiveQueryServer 的连接以及轻松订阅/取消订阅 MoralisQuery。
初始化
let Moralis = require('moralis');
let LiveQueryClient = Moralis.LiveQueryClient;
let client = new LiveQueryClient({
applicationId: '',
serverURL: '',
javascriptKey: '',
masterKey: ''
});
-
applicationId
(必填):它是您的 Moralis Dapp 的 applicationId。 -
serverURL
(必填):它是 LiveQuery 服务器的 URL。 -
javascriptKey
-
masterKey
javascriptKey
和 masterKey
用于在 LiveQueryClient 尝试连接到 LiveQuery 服务器时对其进行验证。 如果您设置它们,它们应该与您的 Moralis 应用程序相匹配。 您可以在此处查看 LiveQuery 协议以获取更多详细信息。
打开
client.open();
在您调用它之后,LiveQueryClient 将尝试向 LiveQuery 服务器发送连接请求。
订阅
let query = new Moralis.Query('Game');
let subscription = client.subscribe(query, sessionToken);
-
query
(必需):这是您要订阅的 MoralisQuery。 -
sessionToken
:如果您提供 sessionToken,LiveQuery 服务器只会向 sessionToken 适合 MoralisObjects ACL 的客户端发送更新。 您可以在此处查看 LiveQuery 协议以获取更多详细信息。
退订
client.unsubscribe(subscription);
-
subscription
(必需):这是您要取消订阅的订阅。调用此方法后,您将不会从订阅对象中获得任何事件。
关闭
client.close();
此函数将关闭与此 LiveQueryClient 的 WebSocket 连接,取消自动重新连接,并取消订阅所有基于它的订阅。
事件处理
我们公开了三个事件来帮助您监控 LiveQueryClient 的状态。
打开事件
client.on('open', () => {
console.log('connection opened');
});
当我们与 LiveQuery 服务器建立 WebSocket 连接时,您将收到此事件。
关闭事件
client.on('close', () => {
console.log('connection closed');
});
当我们失去与 LiveQuery 服务器的 WebSocket 连接时,您将收到此事件。
错误事件
client.on('error', (error) => {
console.log('connection error');
});
当发生网络错误或 LiveQuery 服务器错误时,您将收到此事件。
重新连接
由于整个 LiveQuery 功能依赖于与 LiveQuery 服务器的 WebSocket 连接,因此我们总是尝试保持打开的 WebSocket 连接。
因此,当与 LiveQuery 服务器的连接丢失时,我们会尝试自动重新连接。 我们在引擎盖下做指数回退。
但是,如果 WebSocket 连接由于 Moralis.LiveQuery.close()
或 client.close()
而关闭,我们将取消自动重新连接。
SessionToken
当您订阅 MoralisQuery 时,我们会将 sessionToken 发送到 LiveQuery 服务器。 对于标准 API,我们默认使用当前用户的 sessionToken。 对于高级 API,您可以在订阅 MoralisQuery 时使用任何 sessionToken。 需要注意的重要一点是,当您注销或您使用的 sessionToken 无效时,您应该取消订阅并重新订阅 MoralisQuery。 否则,您可能会遇到安全问题,因为您会收到不应该发送给您的事件。