Ruby on Rails の ActionCable ではなぜ Redis が必要なのでしょうか？


Ruby on Rails の ActionCable を勉強中です。

勉強をしていて一つ疑問に思ったのですが、 Ruby on Rails の ActionCable ではなぜ Redis が必要なのでしょうか？

Node.js の Socket.io では、調べた限りでは特に Redis
またはそれに近いミドルウェアは必要としないようでした。（この認識が間違っている場合は、それもご指摘いただければ幸いです。）

Ruby on Rails も Redis を使わずに WebSocket による双方向通信ができないものかなと思いました。

ご存知の方がいらっしゃいましたら、ご教示いただければ幸いです。




実運用ではRailsアプリケーションとActionCableは別プロセス(やサーバ)になることが想定されるので、プロセスを超えてデータをやりとりする仕組みが必要になります。Redisはこのために使われます。Redis(ともう一つの選択肢であるPostgreSQL)が使われる理由は、標準でイベントベースの通信機能をサポートしているからです。

Socket.ioは詳しくないのですが、アプリケーションと別サーバで運用する場合やWebSocketサーバを複数運用しないといけない場合はプロセス間でのやりとりが必要となるのは変わりありませんので、それを(実運用に耐える形で)実装するにはRedisのようなミドルウェアが必要となるのではないかと思います。




Redisは必ずしも必要ではありません。

ActionCableではPubSubを実現するためSubscriptionAdapterという仕組みを持っています。これは設定により切り替え可能で、Redisの他にPostgreSQLやinlineを使うこともできます。  
<http://guides.rubyonrails.org/action_cable_overview.html#dependencies>

Railsガイドを参考に設定ファイルを書き換えて、Redis以外のアダプターを使うとよいのではないでしょうか。  
<http://guides.rubyonrails.org/action_cable_overview.html#configuration>

例えば以下のような設定でRedisではなくPostgreSQLを使うことができます。

[code]

    # config/cable.yml
    development:
      adapter: postgresql
    test:
      adapter: postgresql
    production:
      adapter: postgresql
    
[/code]

<https://qiita.com/chshii/items/5a2a322dd3b86c0bd5a6>

