【问题标题】:Get real time updates from Microsoft Graph API (beta) Communication API从 Microsoft Graph API(测试版)通信 API 获取实时更新
【发布时间】:2020-03-19 05:24:19
【问题描述】:

我目前正在使用 Microsoft Graph API(测试版)来获取在线状态例如使用 GraphClient 在 spfx webpart(使用 React)中在线、离开等

this.props.context.msGraphClientFactory.getClient().then(async (client: MSGraphClient) => {
    let response = await client
      .api('/communications/getPresencesByUserId')
      .version('beta')
      .post(postData)
      console.log("Communication API Response: "+ response);
    this.usersWithPresence = response.value;
});

这工作正常,但要获取用户的更新状态,我必须刷新页面,以便进行另一个 API 调用并更新存在状态。我想像在 'Skype' 中那样做。

我需要的是关于我可以申请获得的机制的建议 实时更新用户的存在状态,因此一旦用户 更新这反映在我的 webpart 中的状态。我知道我可以使用 setIntervalsetTimeout 函数请求在线状态 在特定的时间间隔之后,但出于学习目的,我不想 一次又一次地以这种方式请求 API,而不是更新 像这样来自服务器的消息是使用 web sockets 发生的。网络如何 这个API可以应用socket之类的东西吗?

欢迎您提出建议。

【问题讨论】:

    标签: javascript reactjs sharepoint websocket microsoft-graph-api


    【解决方案1】:

    今天,此 API 不支持任何类型的订阅机制来判断状态何时发生变化。有一个 uservoice 条目,您可以为它投票。这意味着获得任何更改的唯一方法是定期轮询它。至于套接字 io,目前唯一支持的是 SharePoint 列表,以及您需要建立自己的基础架构来中继消息的任何其他资源。

    【讨论】:

    • 感谢您的澄清!!如果我​​能找到一些关于stand up your own infrastructure to relay the message 部分的有用资源,那就太好了。据我了解,这涉及在特定端口上配置某种 server app,配置套接字连接和命名空间等。 service app 从 api 获取数据并发送到服务器和客户端应用监听来自服务器的outgoing消息。
    • 我鼓励你研究 Azure SignalR
    • 我正在研究 SignalR,当涉及到 SignalR Hub 时,它实际上将数据广播到连接的客户端,根据我的理解 SignalR Hub 将包含从图形 API 获取用户存在状态的逻辑。由于此 API 不公开任何 webhook,因此,在 SignalR 集线器(服务器)中,我仍然需要在特定时间间隔后重复调用 API 以获取更新数据,这是正确的吗?在这种情况下,它与从我的 javascript 代码中定期调用 API 而不是增加使用 SignalR 的复杂性有何不同?
    • 首先你有一个代理效果:如果多个客户端对同一用户的存在信息感兴趣,那么只有你的 SignalR 集线器会轮询图形而不是多个客户端。这减少了你被大规模限制的机会。其次,在我们提供 webhook 的那一天,您可以轻松采用它,因为您已经有一个后端服务来将信息传递给客户端(webhook 是一种服务器到服务器的订阅机制)
    • 有道理!会去的:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2022-01-22
    • 2023-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多