我正在编写一个应用程序来跟踪某个任务的用户之间推送的内容。我正在考虑使用WebSockets发送新内容,因为它们可供当前正在为该给定任务使用该应用程序的所有用户使用。
我在Rails上写这个,客户端应用程序在iOS上(也可能在Android中)。我担心这个WebSocket解决方案可能无法很好地扩展。在决定使用WebSockets和某种轮询解决方案时,我正在考虑一些建议和事项。
Ruby on Rails服务器(如Heroku)是否支持同时打开大量WebSocket?为了论证,让我们说一百万个连接。任何人都可以提供这些东西的材料吗?
如果我以这种方式构建它,它会在服务器托管上花费更多吗?
甚至可以同时维护数百万个WebSockets吗?我觉得这可能不是最好的设计决定。
这是我第一次尝试使用正确的Rails API。任何意见是极大的赞赏。 THX。
答案 0 :(得分:2)
使用Ruby进行WebSockets上的百万次连接,如果不使用群集在不同实例之间传播连接来处理所有数据处理,我就无法看到它的真实性。
这里的问题是序列化和反序列化数据。
同样,您必须研究从服务器向客户端提取数据的频率,如果值得使用AJAX进行定期检查,则需要整个时间处理连接。因为如果你确实处理了连接而你没有使用它 - 那就浪费了资源。 WebSockets构建在TCP层之上,并且所有连接都不是“便宜的”。通过操作系统并向他们询问可用的数据并不是一个简单的过程,如果没有使用世界上最先进的技术,数百万个连接几乎是不可能的。
我认为Erlang能够处理数百万个连接,但我没有详细说明。连接是一回事,另一种是处理数据和连接之间的交互 - 你可能想要检查,因为如果你有繁重的处理算法,那么你肯定需要研究集群解决方案的水平扩展选项。
答案 1 :(得分:2)
俗话说手机,使用websockets / server发送事件。 打个电话,使用APNS。
APNS将缓解wifi下降,tcp / ip socket挂起等诸多问题。真有用。有可能需要一点时间才能通过。但话说回来,websockets有可能采取
iOS的最新版本允许您将APNS发送到客户端,而无需向客户端发送弹出消息,因此它可以向服务器请求更多信息。这与一些后台实现一起真正改善了事情。
如果可能,请不要实现完全匿名的客户端。检测客户端是否重新安装应用程序非常棘手。因此,您最终会向客户端发送重复项。需要考虑到这一点。
APNS在ruby中看起来很容易实现,但我建议避免使用现有的支持谷歌和苹果的宝石/服务的冲动。实施起来比起初看起来要复杂得多。如果您决定坚持使用websockets,那么在{nginx}中使用websockets也很有意义,例如https://github.com/wandenberg/nginx-push-stream-module
ASIDE: 在速度至关重要的情况下使用SMS非常昂贵。每个电话号码每月1美元仅发送每秒1条消息的最大速率。因此每秒发送100条消息=每月100美元加上消息费。请注意100条消息,每秒50条消息= 50美元/月。但是如果你想发送1k消息,则需要20秒。
祝你好运