問題タブ [websocket-rails]
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.
javascript - websocket-rails: websocket に接続できません
Websocket サーバーへの接続方法がわからないため、websocket-rails の使用に関するいくつかの重要な情報を見逃しているに違いありません。websocket_rails:install を実行してガイドに従うと、次のようになります。
もともと、クロムでチェックすると、404エラーであることが明らかで、アドレスが存在しないことを意味します。ガイドには、ルーティングを行う必要があるとは記載されていないため、これを修正する方法がわかりません。
ただし、websocket コントローラーがない場合は、ハンドシェイク タイムアウトになり、faye-websocket 0.10.0 に切り替えても問題は解決しません (ここで提案されているように)。Websocketコントローラーを変更するたびに、存在しないクラスの古い名前を参照する初期化されていない定数エラーが発生するため、何らかのキャッシュが邪魔になる可能性があると思います。
ライブラリでルーティングが行われるファイルを見つけたので、自分でルーティングする必要がないことはわかっています。ここで何が問題なのですか?
websocket - websocket-rails: サーバーは http:// プロトコルを発行します。クライアントは ws:// プロトコルを期待しています
サーバー URL にプロトコル プレフィックスがないことに注意してください。新しいディスパッチャに渡す URL に http:// または ws:// を追加しないでください。WebSocketRails は、利用可能な最適なトランスポートを選択し、正しいプレフィックスを自動的に付加します。
初めて WebSocketRails を使用しています。クライアントで次のエラーが発生します。
「ws://localhost:3000/websocket」への WebSocket 接続に失敗しました: ハンドシェイク応答を受信する前に接続が閉じられました
ブラウザを に移動するとhttp://localhost:3000/websocket
、期待どおりのメッセージが表示されます。ws
URLに移動すると、ERR_DISALLOWED_URL_SCHEME
. したがって、サーバーはメッセージを生成しているように見えますが、クライアントは間違ったプロトコルを試みています。
http
クライアントにではなくプロトコルを強制的に使用させたり、サーバーに ではなくプロトコルws
を強制的にブロードキャストさせるにはどうすればよいですか?ws
http
ruby-on-rails - 「現在のユーザー」の websocket チャネル
websocket-railsを使用すると、コントローラーで次のコードを使用して、websocket パブリッシュ イベントをだますことができます。
私の目標は、現在のユーザー専用の pub-sub チャネルを作成することです。たとえば、「新しいチャット メッセージが送信されました」というイベントを考えてみましょう。このイベントを受信者のチャネルのみにプッシュしたい。
現在、ID に基づいて各ユーザーに固有のチャンネル名を作成しています。次のコードをコントローラーに入れました (別の場所で current_user メソッドを定義しました:
次に、Javascript で、現在のユーザーを次のように自分のチャンネルにサブスクライブします。
その要点は、文字列補間を使用して、ユーザーごとに新しいチャネル、つまりチャネルを作成すること
user12
ですuser123
。
問題は、これが実際には安全でないことです。任意のユーザーは、Javascript を貼り付けるだけで、他のユーザーのプライベート チャネルにアクセスできます。たとえば、ユーザー #1 がユーザー #2 のニュース フィードにアクセスしたい場合、単にdispatcher.subscribe('user2')
.
この問題をどのように解決しますか? この機能が組み込まれている別の pub-sub ライブラリはありますか?
件名の WebsocketRails のwiki エントリを見て、次のコードを config/initializers/websockets.rb に追加してみました
app/controllers/connections_controller.rb に以下を追加
そして、他の場所で、私は電話していますWebsocketRails[:"user#{@current_user.id}"].make_private
しかし、これは何の効果もないようです。
ruby-on-rails - ハンドシェイク中に Websocket Rails が 404 を取得する
「websocket-rails」gem をインストールし、デフォルト設定を行った後、JS ディスパッチャーを作成したところ、Chrome コンソールで 404 エラーが発生しました。
これは私のJSです:
これは私が得るメッセージです:
'ws://localhost:3000/websocket' への WebSocket 接続に失敗しました: WebSocket ハンドシェイク中のエラー: 予期しない応答コード: 404
他のすべては、最初のステップガイドで提案されているとおりです
events.rb
controller/chat_server_controller.rb
ruby-on-rails - Heroku の Rails アプリの Websocket が機能しない
websocket-rails
( https://github.com/websocket-rails/websocket-rails ) gem を使用して既存の RoR アプリにチャット機能を追加し、Heroku の本番モードでテストしています。
localhost では正常に動作しますが、Heroku に送信すると、接続後にサーバーからメッセージを受信しません。
接続は機能します:
フィードバック メッセージが表示されます。
しかし、最初のタスクは、チャットでアクティブなルームをサーバーに要求することです。何も戻っていないことに気付きました。最初のタスクを実行するサーバーのアクションにいくつかのフィードバック メッセージを入れましたが、どれにも到達しませんでした。私が実装したフィードバックは、オブジェクトを返し、それをコンソールに出力するだけの単純な関数のペアです。
Javascript
ルビー
トリガーされることはありません。何か案は?Heroku を機能させるために特別な設定を行う必要がありますか?
@アップデート
AWS でホストされているライブ サーバーでも同じエラーが発生しました。接続は確立されますが、サーバーからクライアントに何も返されません。
@update2
接続が確立されたときと、最初に開いている部屋を要求したときにアプリがいくつかのファイルを書き込むように、いくつかのコードを書きましたが、ファイルは作成されませんでした。アクションは呼び出されていません。
ruby-on-rails - Websocket-Rails gem をスタンドアロンとして実行すると、ライブ サーバーのシンに接続しようとするとタイムアウトになります
チャット モジュールを含むこのアプリをセットアップしていますが、localhost ですべて正常に動作しています。
今、スタンドアロン サービスとしてサーバーに接続しようとしていますがdispatcher
、次のメッセージで最終的にタイムアウトするまで、の接続状態は常に「接続中」です。
'ws://myserver:3001/websocket' への WebSocket 接続に失敗しました: 接続の確立中にエラーが発生しました: net::ERR_CONNECTION_TIMED_OUT
Gemfile
Javascript
初期化子
そして、ここで説明されているようにサービスを開始しています: https://github.com/websocket-rails/websocket-rails/issues/302
ディスパッチャで URL/ポートを変更すると、別のエラーが発生します。しかし、動作するはずのものは2〜3分かかり、その後タイムアウトします。
何が起こっているのかについて何か考えはありますか?設定する必要がある特別な構成はありますか?
javascript - WebSockets: プライベート チャネルで発生した複数のイベントがクライアントに順不同で到着することはありますか
上で実行され、順序が保証されWebsockets
ているという事実を強調する複数の投稿を既に読みました。私は「Websockets」が初めてなので、ちょっとした質問があります。Websockets
TCP Connection
Websocket 接続を介して大きなファイル (1GB) を送信しようとしている単純なアプリケーションがあります。サーバーエンドでrails gem
namedを使用し、フロントエンドでクライアントを使用しています。websocket-rails
java script
イベントが発生し、日付が次々に送信されるプライベートチャネルを作成しました。500 lines' at a time from
同じ Websocket 接続の一部として、同じチャネルを介してサーバーをクライアントに転送します。ひょっとしてパケットが違う順番で届く可能性はありますか?re-order
クライアント側でファイル全体にメカニズムを実装する必要はありますか?
ruby-on-rails - Rails初期化ファイルが本番環境にロードされない
開発セットアップで動作するように websocket-rails gem にパッチを適用しました。
config/initializers の下に websocket_patch.rb ファイルを作成し、websocket-rails-0.7.0\lib\rails\app\controllers\websocket_rails\delegation_controller.rbからコードをコピーしました。
ファイルを参照し、プロジェクト構造と一致させるために、名前空間 Namespace1 が追加されました。
そのため、delegation_controller.rb でデフォルトのアクセスをオーバーライドする必要があります。
開発環境では正常に動作しますが、本番環境では機能しません。config / initalizersの下にファイルをロードする代わりに、参照用のgemファイルに戻ります
Rails バージョン: 3.2.22.4、Ruby バージョン: 2.2、イニタイライザーをロードするための特定の設定は本番環境にはありません。この件に関する詳細情報が必要な場合はお知らせください