如何正确使用SignalR和推送通知?

How to use SignalR and Push notification correctly?

我和我的团队使用 ASP.Net 作为后端,Html 5iOS 作为前端。

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

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

下一步,我们正在考虑 OneSignal(推送通知第三方服务),实现并不那么复杂,我们成功了 sending/receiving 推送通知。

我们现在面临的问题是:

有人可以帮助我们吗?

谢谢,

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

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

另一种可能的解决方案:

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

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