我和我的团队使用 ASP.Net 作为后端, Html 5 和 iOS 作为前端制作项目。< / p>
我的服务有聊天功能,用户可以互相聊天。它是使用SignalR实现的。
我们已经成功实现了该功能,但最后,我们已经意识到SignalR仅在打开应用程序时处于活动状态。当应用程序不是时,用户无法从服务中接收任何信息。
下一步,我们正在考虑OneSignal(推送通知第三方服务),实施并不复杂,我们成功发送/接收推送通知。
我们现在面临的问题是:
任何人都可以帮助我们吗?
谢谢,
答案 0 :(得分:2)
您需要在服务器端跟踪已连接/已断开连接的用户。 如果用户已连接,则发送信号器消息。如果用户未连接,则发送推送通知。
也就是说,用SignalR跟踪用户连接/断开连接并不容易,因为从客户端停止(即:关闭应用程序,网络故障等)到服务器真正认为的时间有延迟客户端已断开连接。如果我正确的话可能会持续20秒。发生这种情况是因为SignalR在放弃之前尝试使用相同的ConnectionId重新解析20秒。
另一种可能的解决方案:
通过信号器和推送通知发送每条消息。 在每个消息有效负载(在服务器上生成)上设置uid属性。 客户端显示该消息,然后将该uid添加到本地数据库。 当客户端使用相同的uid(从推送通知或信号器开始)获取另一条消息时,它将被丢弃。
我在聊天应用程序中完成了这项工作,效果非常好。唯一的问题是,当应用程序连接时你会浪费推送通知,但是推送通知服务很便宜......而且我很确定SignalR消息的推送速度比推送通知快得多。