gpt4 book ai didi

ruby-on-rails - ROR 推送通知引擎

转载 作者:行者123 更新时间:2023-12-04 16:44:23 25 4
gpt4 key购买 nike

我最近被分配了开发通知引擎的任务。对于通知,我们将使用推送通知。我正在为引擎寻找最佳解决方案,因为将来我们还必须将应用程序扩展到其他设备。以下是项目的一些细节

后端:
应用程序的后端是在 Ruby on Rails 中作为 webservices 开发的

将有推送通知的设备
iPhone、Android、Pebble(智能 watch )、Web 应用程序

当前解决方案:
目前,我们正在考虑制作一个用于通知的后端数据库表。 Rails 中的工作类将在 1 分钟后运行,它将所有通知推送到存储在数据库中的设备。从 webservice 方法中,我们将数据插入到通知表中。

对于推送通知,我们不想使用 UrbanShip 之类的服务。我们只会使用 Ruby Gems 来实现它们。目前,我们做了一个基于 GCM gem 的小演示,用于 android 推送通知。

问题:我的解决方法是否正确?或者有没有更好的解决方案来解决这种问题。

编辑:

我认为我之前对问题的描述有点困惑。

最终,我们将在 Ruby 中使用 GEMS 发送推送通知。例如,对于 iOS,我们将使用 Houston 或 Grocer gem,而对于 Android GCM。

问题:我们需要一些数据库表来存储通知,以便 GEMS(上面提到的)可以使用它们向用户发送通知。现在,为了填充数据库表,我们需要在某处编写逻辑,以便我们可以在表中插入通知。

例如,假设当用户第一次在应用程序中注册时,我们会向他发送通知。现在,要做到这一点,我们需要编写在 Register 函数中添加通知的代码。

喜欢

public void Register()
{
//Registration logic

//Add a notification in the notification table
}

现在,这是一个问题,因为我们需要在所有需要发送通知的函数中添加通知逻辑。 ROR 或一般情况下还有其他好的解决方案吗?
一些设计模式?

最佳答案

我花了大量时间研究基于 Ruby 的推送通知解决方案。最好的是RPush https://github.com/rpush/rpush . RPush 在这一点上经过了很好的测试(我们用它来发送数百万条通知),并且很好地处理了许多困难的边缘情况。我不建议从头开始构建自己的,因为有很多潜在的陷阱和边缘情况。 RPush 不支持 Pebble 或 Web App 通知,但可以扩展以支持。

如果您决定探索其他替代方案,请确保它们:

  • 为 APNS 优雅地处理关闭的连接 - 在许多情况下,Apple 可能会关闭与其服务器的连接,您的推送通知库必须正确处理此问题,否则可能会无法发送数千个后续通知
  • 与 Apple 的反馈服务通信 - Apple 要求您轮询他们的一个端点以获取要停止向其发送通知的设备列表。如果您未能做到这一点,您可能会受到速率限制。
  • 可以根据您的要求以足够快的速度发送通知。

  • 在 Ruby 之外,最好的推送通知库似乎是 PushSharp (C#) 和 Node-Apn(仅限 NodeJS,iOS)

    最后,听起来您有特定的需求需要您自己完成。但对于其他人,我强烈建议您使用 3rd 方服务。可靠地大量发送推送通知很困难,并且有许多 3rd 方服务可以以低成本为您完成。例如,UrbanAirship、Parse 和 OneSignal(我的服务)都是很棒的 3rd 方解决方案。

    更新以解决修订后的问题:

    最好的设计模式是拥有一个处理消息传递的第二个守护进程或 Cron 作业。尝试在 Ruby on Rails 应用程序中执行此操作是不切实际的。

    RoR 应用程序可以像您描述的那样将行作为队列插入到通知表中。然后守护进程或 cron 作业可以从队列中获取通知并传递它们。

    如果您使用 RPush,这就是它遵循的模式。它带有一个 Gem 加载到你的 Rails 应用程序中,将通知插入到数据库队列中,以及一个守护进程,你在服务器上保持运行,定期检查新的通知发送并传递任何排队的通知。

    关于ruby-on-rails - ROR 推送通知引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23637371/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com