問題タブ [phoenix-channels]
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.
phoenix-framework - 現在のトピックを検出する方法は?
トピック ID はどこに保存しますか?
ソケットに関しては、次を使用できます。
それはソケット スコープでしたが、私のユーザーは同時に複数のトピックに参加できます。つまり、新しいトピックが参加するたびに上記のコードが topic_id をオーバーライドします。本当ですか?
でアクティブなトピック ID を知りたい場合はどうすればよいhandle_in
ですか?
例えば:
私はこれについて考えました:
これを行う別の方法はありますか?または、これはどのように行われますか?
elixir - Phoenix - Ecto クエリの結果を特定のクライアントに返す
私は現在、次のことが起こるスキームを考案しようとしています。
クライアントA
は topic/channel にサブスクライブ/接続されていますT
。
A
select
はクエリの形式でメッセージを に送信しますT
。
A
クエリ結果のみを受信し、他のサブスクライバーは受信しません。
これはチャネルを使用しても可能ですか? Channels を選んだ主な理由は、優れた websocket サポートのためでしたが、他の Phoenix ソリューションも受け入れています。
ios - PhoenixWebSocket を使用して iOS から Heroku でホストされている Phoenix チャネルに接続できない
Phoenix アプリを Heroku にプッシュしましたが、iOS からチャネルに接続する以外は正常に動作しています。
ブラウザ上のチャネルは期待どおりに機能します。
iOS ではPhoenixWebSocketを使用しています。開発環境では、ローカルの Phoenix アプリへの接続は期待どおりに機能します。
私が得ている問題は、Web ソケットの URL を Heroku アプリにポイントすると、次のエラーが発生することです。
今日の初めにエラー メッセージを探し回ったところ、Chris McCord からの投稿を見つけました。このエラー メッセージは、サーバーがリクエストのアップグレードを拒否した結果であると書かれていました。
ただし、Heroku を調べてみると、次のことがわかりました。Websockets 機能は、すべてのアプリケーションでサポートされています。
そのため、問題が iOS 側にあるのか、Heroku 側にあるのか混乱しています。
Chris のサンプルチャット アプリケーションを Heroku にプッシュし、PhoenixWebSocket に付属のデモ アプリに接続しようとしましたが、同じエラーが発生します。
Phoenix アプリをホストしている iOS と Heroku の間で動作する Web ソケット要求を取得できた人はいますか?
チャンネルに参加しようとする前に、iOS でリクエストを処理する必要がある別の方法があるかどうかは誰にもわかりませんか? または、Web ソケットに関連する Heroku のセットアップで見逃したものがあるのでしょうか?
iOS でのリクエストの URL:
助けていただける方に感謝します。他に何かお手伝いできることがあればお知らせください。
ポール
phoenix-framework - フェニックス チャネルでテンプレート パーシャルをメッセージとして送信する
チャネルを使用して部分的なテンプレートを送信するのは悪い考えですか?
もう 1 つのオプションは、JSON を送信し、javascript と eex でテンプレートを複製することです。
チャンネルの内部構造がわからず、メッセージサイズの制限やその他の欠点がある可能性があるため、これを求めています。
投稿を保存した後、コントローラーで送信する方法は次のとおりです。
twitter - spawn 関数から GenServer 子プロセスを作成するには?
ExTwitter Streamを使用してリアルタイムでツイートを追跡し、チャネル エンドポイント経由でブロードキャストしています。イベントごとに 1 つのプロセスを作成し、それに 1 つの Twitter ストリーム リスナーを割り当てたいと思います。次に、新しいサブスクライバーが同じイベントに参加すると、以前のストリーム状態を取得し、新しいツイートを受信してブロードキャストします。
以下から GenServer プロセスを作成する方法:
次のモジュールの子として event_id で割り当てます。
新しいツイートを受信する方法、または最終的にイベント モニターの外部で Twitter ストリームを停止する方法は?
スーパーバイザー:
nginx - Nginxの背後にあるPhoenixでWebsocketsをセットアップするには?
Nginx を介して Phoenix アプリに接続するように Web ソケットを設定しようとしていますが、403 エラーが発生し続けます。これを本番環境で機能させるための正しい構成を誰でもアドバイスできますか-開発環境は問題ありません。
私のNginx conf:
私の prod.exs conf:
必要に応じて、リクエストに応じて追加情報を提供できます。
ドメイン名を介してアプリに問題なくアクセスできます。最後に残っている唯一の問題は、Web ソケットを機能させることです。
私を正しい方向に向けることができる人に感謝します。
jquery - プロジェクト外のクライアントからメッセージを送信するフェニックス チャネル
Phoenix アプリケーションのユーザー チャネルにメッセージを送信したいと考えていました。のように、user_token をチャネルに参加させusers:user_token
ましたuser_channel.ex
。toy_controller
ブロードキャストメソッドを呼び出すことにより、と呼ばれる別のコントローラーからそれを行うことに成功しました。ブロードキャスト方式はユーザー チャネルにあります。そして、イベントを処理するための jQuery ファイルを作成しました。IoTのことをしたかったので、プロジェクトの外から同じチャンネルにメッセージを送信できるものを探していました。と呼ばれるpythonモジュールとoccamy.socket
、それが内部で使用するPhoenixのJSクライアントを試しました。それから、私はいつも切断を見つけました。Phoenix からの Websocket 接続の正確なアドレスがわかりません。そのプロジェクトフォルダー自体にあるそのPhoenix npmライブラリで試している場合、それは言うReferenceError: window is not defined
いつも。web/static/js/socket.js
そして、それが次のように書かれているファイル のソケットの初期化部分が原因だと思います
、しかしよくわかりません。私が試したことは以下のとおりです
Python クライアントでも、このアドレスに接続しようとしたところ、切断エラーが発生しました。ユーザーのセンサーデータを監視したいIoTの目的でそれを行いたいです。各ユーザーは、監視する独自のセンサーを持っています。topic:subtopic
というわけで、チャンネルchannel を として設定しましたusers:user_token
。ユーザーの一意のトークンを使用して、ラズベリーパイからこのチャネルにメッセージを送信する必要があります。私のuser_channel、user.js、app.js、およびsocket.jsを以下に示します。
elixir - Phoenix Channels - コントローラからブロードキャスト - current_user を見つける方法は?
次のように、submission_controller でフォームの送信をブロードキャストするアプリがあります。
ただし、私が今やろうとしているのは、 current_user だけがそのフォームにブロードキャストされた送信にアクセスできるようにすることです。(たとえば、form 2 が別のユーザーに属している場合、current_user は "forms:2" の送信を見る方法がありません)。
接続アクションでチャネルに割り当てたユーザー ID に対してのみフォームをフィルタリングすることにより、チャネルjoin
アクションでこれを行うことができます。
しかし、broadcast
私は利用できませsocket
ん。
私の質問:
チャネル トピックによってソケットを何とか見つける方法はありますか? 何かのようなもの:
/li>
その後、 if を確認user_id == submission.user_id
し、 true の場合はブロードキャストすることができました
- それが不可能な場合、これを実行し、current_user だけがフォーム送信にアクセスできるようにするためのベスト プラクティスは何でしょうか?
sockets - 別のチャンネルへのブロードキャスト Phoenix 1.1.6
アプリで別のチャンネルにブロードキャストしようとしていますが、うまくいきません。また、テストを作成しようとしていますが、方法がわかりません。
収集できることから、notification_channel からのメッセージのブロードキャストに成功しましたが、chat_channel では受信されません。
通知はチャットに送信する必要があります。
notification_channel.ex
chat_channel.ex
テスト
reply
このテストは成功し、ブロードキャストを変更するかコメントアウトすることで失敗させることができます。handle_in
をで受信するようfail:please
に変更して失敗させることはできませんchat_channel
。ref = push socket1, "new:group:recommendation", payload
その場合、これを驚かせないように変更する場合、それは文句を言うでしょう
ref = push socket, "new:group:recommendation", payload
。
これは、ワイヤ上にあるものです。
私が使用するelmパッケージはソケットレベルでの認証をまだサポートしていないため、チャネル認証を使用します。だから、これはそれがどのように見えるかですchat
終わり