ruby-on-rails - 哪个更好:使用多个通道或在单个通道中有多个条件?
问题描述
我正在使用 Rails ActionCable。
我主要可以在两种选择之间进行选择。其中之一是将多个渠道用于不同的功能。其他选项是使用具有多个条件的相同通道来创建相同的功能。
放大时哪个更好?在构建应用程序时过度依赖 websockets (Actioncable) 的缺点是什么?
有人可以向我推荐一些很好的文章,它解释了 websockets、redis 缓存及其在应用程序扩展时的效果。
感谢你们期待积极的回应。
解决方案
虽然我认为这个问题与“多个 websocket 通道,单个 ws 对象? ”重复,但我将添加一些具体的 ActionCable 考虑因素以澄清。
放大时哪个更好?
扩展时,单个 WebSocket 连接(通常)更好。
服务器对其可以处理的连接数有限制,这意味着为每个客户端添加 WebSocket 连接将消耗有限的服务器资源。
例如,如果每个客户端需要 2 个 WebSocket 连接而不是 1 个,则服务器的容量减少一半(从 100% 下降到 50%)。
在构建应用程序时过度依赖 websockets (Actioncable) 的缺点是什么?
一些机器运行不支持 WebSockets 的旧版浏览器。此外,WebSocket 应用程序和客户端通常更难编码,这意味着更高的维护成本。
话虽如此,WebSockets 是解决困扰 Web 应用程序多年的问题的绝佳解决方案,并且优于轮询技术。
总而言之,我认为应该忽略缺点,因为优点远远超过成本。
但是:
话虽如此,请注意目前的Actioncable
实施速度很慢。
事实上,有人可能会争辩说实施速度太慢了,轮询会更好。
将ActionCable 与 AnyCable或服务器端Iodine WebSocket + Pub/Sub 解决方案进行比较将立即突出一个事实,即 ActionCable 应该被其他解决方案替换,直到它被修复为止。
进一步阅读:
我刚开始阅读这篇关于 Ruby WebSockets、Push 和 Pub/Sub的文章,看起来写得很好。
我还写了一篇关于 WebSocket 的 Ruby 实现的主要问题以及服务器端 WebSocket 解决方案如何解决这些问题的文章。你可以在这里阅读。
推荐阅读
- sql - SQL:将行转换为列
- javascript - 使用 assert 测试 JS 中是否显示错误信息
- javascript - 如何优化创建两个数组项的所有可能组合的两个嵌套循环
- haskell - 使用 Data.Tree 模块构建和修改树
- mysql - 查找每个父记录的最新子记录(有条件)
- python - 将 lambda 函数应用于 pandas 上的列以避免冗余
- mysql - 如何检索每行中的最后更新信息
- python - 如何测试表单中的单个字段?
- swift - swift mapview 相关的问题,我想在哪里捕获 mapview 在这个时候看到的屏幕截图
- xml - 与 rest api XML 通信,将参数作为具有特定顺序的数组而不是字符串传递