6

我正在编写一个应用程序来跟踪特定任务的用户之间推送的内容。我正在考虑使用 WebSockets 发送新内容,因为它们可供当前正在使用该应用程序执行该给定任务的所有用户使用。

我在 Rails 上写这篇文章,客户端应用程序在 iOS 上(可能也会在 Android 上)。恐怕这个 WebSocket 解决方案可能无法很好地扩展。在决定使用 WebSockets 还是使用某种轮询解决方案时,我正在寻求一些建议和要考虑的事情。

Ruby on Rails 服务器(如 Heroku)是否支持同时打开大量 WebSocket?为了争论,假设有一百万个连接。任何人都可以向我提供这些东西的任何材料吗?

如果我以这种方式构建它,它会在服务器托管上花费更多吗?

是否有可能同时维护数百万个 WebSocket?我觉得这可能不是最好的设计决策。

这是我第一次尝试正确的 Rails API。任何意见是极大的赞赏。谢谢。

4

2 回答 2

3

WebSockets 上的数百万个连接,使用 Ruby,如果您不使用集群在不同实例之间传播连接以处理所有数据处理,我看不到它的真实性。
这里的问题是序列化和反序列化数据。

您还必须研究需要多久将数据从服务器拉到客户端,以及是否值得使用 AJAX 进行定期检查,然后一直处理连接。因为如果你确实处理了连接然后你不使用它 - 这是浪费资源。WebSockets 建立在 TCP 层之上,所有连接对于操作系统来说并不“便宜”,并且再次向它们询问可用数据并不是一个简单的过程,如果不使用最先进的技术,有数百万个连接几乎是不可能的事情在世界上。

我认为 Erlang 能够处理数百万个连接,但我没有详细信息。连接是一回事,另一回事是处理数据和连接之间的交互 ​​- 您可能需要检查这一点,因为如果您有繁重的处理算法,那么您肯定需要研究集群解决方案的水平扩展选项。

于 2012-05-15T09:36:39.943 回答
3
  • 如果您正在实施聊天,请使用 websockets。
  • 如果您正在实时实现 1 路消息,请使用服务器发送的事件。
  • 如果您要实现每隔几个小时左右发送一次的单向消息,请使用 APNS。

俗话说手机在手,用websockets/server发送事件。手机放在口袋里,使用 APNS。

APNS 将缓解 wifi 下降、tcp/ip 套接字挂起和许多其他问题。真的很有用。有可能需要一点时间才能通过。但是话又说回来,websockets 有机会

最新版本的 iOS 允许您在不向客户端弹出消息的情况下向客户端发送 APNS,因此它可以向服务器询问更多信息。这与一些后台实现一起确实改善了事情。

如果可能,不要实现完全匿名的客户端。检测客户端是否重新安装应用程序非常棘手。因此,您最终会向客户端发送重复项。需要考虑到这一点。

APNS 在 ruby​​ 中实现看起来微不足道,但我建议避免这种冲动并使用支持 google 和 apple 的现有 gem/服务。实施起来比起初看起来要复杂得多。

如果您决定坚持使用 websockets,那么在 nginx 中使用 websockets 可能是有意义的,例如https://github.com/wandenberg/nginx-push-stream-module

旁白:在速度至关重要的情况下使用 SMS 非常昂贵。每个电话号码每月 1 美元只能发送每秒 1 条消息的最大速率。所以每秒发送 100 条消息 = 100 美元/月加上消息费。请注意,以 50 条消息/秒的速率发送 100 条消息 = 50 美元/月。但如果你想发送 1k 条消息,则需要 20 秒。

祝你好运

于 2014-11-22T03:36:27.133 回答