【问题标题】:ActionCable: Why so many connections?ActionCable:为什么有这么多连接?
【发布时间】:2017-11-30 01:55:12
【问题描述】:

自从在本地开发环境中试用 ActionCable 以来。我注意到应用程序变慢并经常挂起。

如果我运行 netstat,我会看到很多连接,它们是由 action cable 创建的。这是预期的和正常的吗?

 netstat -atn | grep 3000
tcp4       0      0  127.0.0.1.3000         127.0.0.1.52163        ESTABLISHED
tcp4       0      0  127.0.0.1.52163        127.0.0.1.3000         ESTABLISHED
tcp4       0      0  127.0.0.1.3000         127.0.0.1.52161        ESTABLISHED
tcp4       0      0  127.0.0.1.52161        127.0.0.1.3000         ESTABLISHED
tcp4       0      0  127.0.0.1.3000         127.0.0.1.52159        ESTABLISHED
tcp4       0      0  127.0.0.1.52159        127.0.0.1.3000         ESTABLISHED
tcp4       0      0  127.0.0.1.3000         127.0.0.1.52157        ESTABLISHED
tcp4       0      0  127.0.0.1.52157        127.0.0.1.3000         ESTABLISHED
tcp4       0      0  127.0.0.1.3000         127.0.0.1.52155        ESTABLISHED
tcp4       0      0  127.0.0.1.52155        127.0.0.1.3000         ESTABLISHED
tcp4       0      0  127.0.0.1.3000         127.0.0.1.52152        ESTABLISHED
tcp4       0      0  127.0.0.1.52152        127.0.0.1.3000         ESTABLISHED
tcp4       0      0  127.0.0.1.3000         127.0.0.1.52146        ESTABLISHED
tcp4       0      0  127.0.0.1.52146        127.0.0.1.3000         ESTABLISHED
tcp4       0      0  *.3000                 *.*                    LISTEN
tcp4       0      0  127.0.0.1.3000         127.0.0.1.51682        TIME_WAIT
tcp4       0      0  127.0.0.1.3000         127.0.0.1.51688        TIME_WAIT
tcp4       0      0  127.0.0.1.3000         127.0.0.1.51684        TIME_WAIT
tcp4       0      0  127.0.0.1.3000         127.0.0.1.51686        TIME_WAIT
tcp4       0      0  127.0.0.1.3000         127.0.0.1.51667        TIME_WAIT
tcp4       0      0  127.0.0.1.3000         127.0.0.1.51690        TIME_WAIT

我已尝试更改急切加载,但似乎并没有改变这种行为

config.eager_load = true

【问题讨论】:

  • 您如何维护连接
  • 仅使用 ActionCable 默认设置进行简单通知
  • 所以这不会是问题,因为您使用的是默认设置,因此它创建了多个连接。为了避免它,您可以通过设置生产配置来使用生产配置。开发:适配器:异步测试:适配器:异步生产:适配器:redis url:redis://10.10.3.153:6381 channel_prefix:appname_production
  • 您能告诉我们您在开发中使用的服务器吗?我敢猜测,如果你搬到 Puma 进行开发,问题就会得到解决。
  • @stef 我正在使用 Puma 和 Rails 5.1

标签: ruby-on-rails actioncable


【解决方案1】:
production:
 adapter: redis
 url: redis://redis.example.com:6379

local: &local
 adapter: redis
 url: redis://localhost:6379

development: *local
test: *local

https://www.phusionpassenger.com/library/config/standalone/action_cable_integration/

点击链接

异步适配器

异步适配器用于开发/测试,不应在生产中使用。

Redis 适配器

Action Cable 包含两个 Redis 适配器:“普通”Redis 和 Evented Redis。这两个适配器都要求用户提供指向 Redis 服务器的 URL。此外,当为多个应用程序使用同一个 Redis 服务器时,可以提供一个 channel_prefix 以避免通道名称冲突。有关详细信息,请参阅 Redis PubSub 文档。

PostgreSQL 适配器

PostgreSQL 适配器使用 Active Record 的连接池,因此应用程序的 config/database.yml 数据库配置用于其连接。这在未来可能会改变。

【讨论】:

    猜你喜欢
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2018-11-11
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    相关资源
    最近更新 更多