問題タブ [actioncable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Socket.io サーバーおよびクライアントとしての Rails 5 アプリ (Action Cable)
Websocket のエミッターまたはサーバーとしての Action Cable (Rails 5 機能) に精通しています。ただし、WebSocket 経由でデータを送信する API を使用することになっています (例: 'socket.provider.com?token=12345')。
socket.io-client-simple ( https://github.com/shokai/ruby-socket.io-client-simple ) を使用してプレーンな Ruby ファイルでいくつかのテストを行いましたが、これがどのように機能するかはわかりませんデプロイされた Rails アプリで動作します。API プロバイダーによって発行されたイベントを常にリッスンする別のプロセスが必要だと思います。誰かが似たようなことをしましたか?デプロイには Heroku を使用します。
注: イベントからのデータの一部を受信して永続化する必要があるため、websocket を受信して Rails アプリ (つまり、Javascript Socket.IO ライブラリ) に投稿するためにクライアント側のアプローチを使用することはオプションではないと思います。リアルタイムで、少なくとも 1 つのクライアントの接続性に依存しません。
また、何らかの方法で Action Cable を「イベントのリスナー」として機能するように自動的に設定する方法があるかどうかも疑問に思っています。これまでのところ、そのトピックについては何も読んでいませんが、その方向性に関するいくつかの提案を見たいと思っています.
更新: プロバイダーの websockets API に接続するためにこれまでに使用した Ruby コードは次のとおりです。
sockets - Webソケットの複数のチャネルを実行する際のRails 5 ActionCableの問題
snlammと私は、Rails アプリに複数の Web ソケット チャネルを実装する際に問題を抱えています。エラーは、以下の応答の後にサーバーがフリーズすることです。
注: ブラウザー コンソールはエラーをスローしません。Chrome v 50.0 (最新バージョン) を使用しています。
ただし、ブラウザーとサーバーの両方を再起動すると、矛盾して次のようになります。
すべてが正常に動作します。
前述のように、この修正には一貫性がなく、多くの場合、サーバーがフリーズします。実行中のチャネルが 1 つだけの場合、問題がないことに気付きました。
これは、追加した 2 つのチャネルのうちの 1 つであるアイテム チャネルのコードです。両方のチャネルのコードはほぼ同じです。
ルート
チャンネル/application_cable/channel.rb
チャンネル/application_cable/connection.rb
チャンネル/items_channel.rb
ビュー/注文/show.html.erb
これは、アイテムの表示に関連付けられたチャネルのビューです。
controllers/items_controller.rb
assets/application.js
assets/javascripts/channels/chatrooms.js
assets/javascripts/channels/items.js
サーバーを終了した後、ps aux | を実行します。rails、ruby、puma、redis を grep すると、それらはすべて正常に終了しました (つまり、ゾンビ プロセスはありませんでした)。サーバーがフリーズする原因は何ですか?
ruby-on-rails - AuthLogic を ActionCable と連携させる
私は新しい Rails 5 (RC1) アプリに取り組んでいます。ユーザー認証に AuthLogic を使用しましたが、ActionCable に到達するまでは、いつもどおりうまく機能します。
エラーが表示されます: オブジェクトを作成する前にコントローラー オブジェクトで Authlogic::Session::Base.controller をアクティブにする必要があります
私は試した:
しかし、Connection クラスは Controller ではないため、これは機能しません。
AuthLogic コードを確認しましたが、コントローラー オブジェクトへの依存をバイパスする方法がわかりません。ユーザーのセッションをロードするだけです。何かご意見は?
ruby-on-rails - ActionCable でユーザーを「オンライン」に保つ
ユーザーがオンラインかどうかに大きく依存するコードがあります。
現在、ActionCable を次のようにセットアップしています。
ここで取り上げたいのは、ユーザーがオフラインになる代わりにブラウザを閉じただけの場合です。ただし、購読解除の問題は、ページが更新されることです。そのため、ページを更新するたびに、unsubscribed
. したがって、利用可能であると考えていても、利用不可として表示されます。
ここで重要なことは、使用可能であることはデフォルトではないため、元に戻すことができるということです。これは、ユーザーがリクエストを受け取るために選択するものです。
このようなケースを処理する最善の方法を知っている人はいますか?
ruby-on-rails - ActionCable でキーを使用して認証する方法
Cookie をActionCable
使用して認証できましcookies.signed[:user_id]
たが、キーを使用して認証する方法がわかりません。たとえばAuthorization
、接続を確立するときにヘッダーを送信します。
ApplicationCable::Connection
クラスでアクセスできる唯一の変数はcookies
. 他の変数 (params
およびheaders
) は使用できません。
何か案は?
ruby-on-rails - ページ変更時に Action Cable からの購読解除を検出
Rails でチャット ルーム タイプのシステムを構築しています。アクティブなユーザーのリストを更新できるように、サーバー上でユーザーがチャネルを離れたとき (ページを閉じたとき) を検出する必要があります。GitHub でドキュメントとサンプルを検索しましたが、答えが見つからないようです。
以前、切断イベントをトリガーする SignalR を使用したことがありますが、Rails 5 に相当するもの (実際に存在する場合) が見つかりません。
チャネル クラスでサブスクライブされていないメソッドの例を見ることができますが、新しいページに移動したり、ブラウザーを完全に閉じたりしても、これは決してトリガーされません。
編集:これが役立つかどうかはわかりませんが、ターボリンクは使用していません。