【问题标题】:How to use SignalR and Push notification correctly?如何正确使用 SignalR 和推送通知?
【发布时间】:2018-02-13 20:43:25
【问题描述】:

我和我的团队使用 ASP.Net 作为后端、Html 5 和 iOS 作为前端来制作项目。

我的服务有聊天功能,用户可以互相聊天。它是使用 SignalR 实现的。

我们已经成功实现了该功能,但最后,我们意识到 SignalR 仅在应用程序打开时才会激活。如果应用程序不在,用户将无法从服务中接收任何信息。

下一步,我们正在考虑OneSignal(推送通知第三方服务),实现并没有那么复杂,我们成功发送/接收推送通知。

我们现在面临的问题是:

  • 应用程序打开后,如何正确处理 Signalr 和 OneSignal 发送的信息?我们不希望在应用打开时收到推送通知,但当应用没有时我们会这样做。

有人可以帮助我们吗?

谢谢,

【问题讨论】:

    标签: push-notification signalr onesignal


    【解决方案1】:

    您需要在服务器端跟踪连接/断开连接的用户。 如果用户已连接,则发送信号器消息。如果用户未连接,则发送推送通知。

    也就是说,使用 SignalR 跟踪用户连接/断开连接并不容易,因为从客户端停止(即:关闭应用程序、网络故障等)到服务器真正思考时存在延迟该客户端已断开连接。如果我是正确的,它可能是 20 秒左右。发生这种情况是因为 SignalR 在放弃之前尝试使用相同的 ConnectionId 重新连接 20 秒。

    另一种可能的解决方案:

    通过信号器和推送通知发送每条消息。 在每个消息负载(在服务器上生成)上设置一个 uid 属性。 客户端显示消息,然后将该 uid 添加到本地数据库。 当客户端收到具有相同 uid 的另一条消息(来自推送通知或 Signalr)时,它将被丢弃。

    我已经在一个聊天应用程序中完成了这项工作,而且效果很好。唯一的问题是当应用程序连接时你会浪费推送通知,但推送通知服务很便宜……而且我很确定 SignalR 消息的到达速度比推送通知快得多。

    【讨论】:

    • 其实OneSignal服务是免费的,所以我不太在意定价。我唯一想知道的是服务器的性能,因为服务器应该同时发送推送通知和信号器消息。
    • 如果您每分钟发送数百或数千条消息,您可能是对的。这是要测试的东西。但是,如果您打算拥有如此巨大的工作量,我建议您实现分布式架构和背板。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多