問題タブ [ratchet]

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.

0 投票する
2 に答える
759 参照

timer - Ratchet WampServerInterface とタイマー

WampServerInterface インスタンスからタイマーを開始する方法があるかどうか疑問に思っていましたか?

サーバーオブジェクトに設定できることがわかりました。しかし、誰かが特定のイベントをサブスクライブする場合は、WanpServerInterface オブジェクトから作成する必要があります。

何か考えはありますか?

よろしく、

0 投票する
2 に答える
5427 参照

laravel - WebSocket を使用する場合のベスト プラクティスは?

Laravel 4 で記述された Web アプリケーションを取得しました。このアプリケーションは Ratchet を使用し、より具体的には、パッケージLatchetを使用します。補足として、私は次のテクニックを使用しています:

これで、次のシナリオが得られました。

  • Websocket を介して更新を受信する必要があるスライドショーがあります。
  • アプリケーション全体がセットアップされ、ZeroMq を介して PHP から Websocket クライアントに新しいコード変更を公開できます。
  • 私のroutes.phpには、トピックが正しく登録されるように、次のコードがあります。

    /li>
  • 次に、ラチェット サーバーを起動します。

sudo php artisan latchet:listen

写真がアップロードされたら、次のコードを実行して、トピックをリッスンしているクライアントに更新をプッシュできます (PhotoStream/client1この場合)。

このコードはすべて機能しますが、更新の場合です。私の質問は次のとおりです。

クライアントの初期化はどのように処理すればよいですか?

  1. 最初に単純な古い PHP でページをレンダリングしてから、Websocket クライアントを初期化してから、さらに更新 (ある場合) を受け取る必要がありますか?
  2. または、新しい websocket クライアントを登録するときに、リクエストに追加のパラメーターを指定して、サーバーが websocket を介して完全なデータを送信する必要がありますか?

2 つのオプションのうち後者が最良のオプションのように思えますが、これを適切に実装する方法がよくわかりません。

0 投票する
2 に答える
9804 参照

php - Ratchet PHP WAMP - React / ZeroMQ - 特定のユーザー ブロードキャスト

:これは、を利用するこの質問と同じではありません。私は代わりに使用しているので、この質問は特にその部分に関係しています。これは将来他の人に役立つことがわかるので、コード例と説明を含む回答が必要です。MessageComponentInterfaceWampServerInterface

個々のユーザーに対してループ プッシュを試みる

私は Ratchet と ZeroMQ の WAMP 部分を使用しています。現在、プッシュ統合チュートリアルの作業バージョンがあります。

私は次のことを実行しようとしています:

  • zeromq サーバーが稼働中で、サブスクライバーとアンサブスクライバーをログに記録する準備ができています
  • ユーザーは、websocket プロトコルを介してブラウザーで接続します
  • 要求した特定のユーザーにデータを送信するループが開始されます
  • ユーザーが切断すると、そのユーザーのデータのループが停止します

ポイント(1)と(2)が機能していますが、問題は3番目のものにあります:

まず、特定のユーザーにのみデータを送信するにはどうすればよいですか? おそらく「トピック」が個々のユーザーIDになる場合を除いて、ブロードキャストはそれを全員に送信しますか?

第二に、セキュリティ上の大きな問題があります。クライアント側からサブスクライブしたいユーザー ID を送信する必要があるように思われる場合、ユーザーは変数を別のユーザーの ID に変更するだけで、そのデータが代わりに返されます。

第三に、実際のループを開始するには、zeromq のコードを含む別の php スクリプトを実行する必要があります。これが最善の方法であるかどうかはわかりませんが、個別の php ファイルではなく、コードベース内で完全に機能するようにしたいと考えています。これは、私が分類する必要がある主要な領域です。

次のコードは、私が現在持っているものを示しています。

コンソールから実行するだけのサーバー

私は文字通りphp bin/push-server.phpこれを実行するために入力します。サブスクリプションとサブスクリプション解除は、デバッグ目的でこのターミナルに出力されます。

Websocket 経由でデータを送信するプッシャー

無駄なことは省き、メソッドに集中しましonMessage()onSubscribe()

ループ内で上記のプッシャー コードの使用を開始するスクリプト

これは私の問題です。これは、将来的に他のコードに統合される可能性がある別の php ファイルですが、現在、これを適切に使用する方法がわかりません。セッションからユーザーの ID を取得しますか? 私はまだクライアント側から送信する必要があります...

最後に、サブスクライブするクライアント側の js

結論

上記は機能していますが、次のことを理解する必要があります。

  • 個々のメッセージを個々のユーザーに送信するにはどうすればよいですか? 彼らが JS で websocket 接続を開始するページにアクセスしたときに、PHP のキューに何かを押し込むスクリプト (zeromq) も開始する必要がありますか? それが私が現在手動で行っていることであり、それは間違っていると感じています.

  • JS からユーザーをサブスクライブする場合、セッションからユーザー ID を取得してクライアント側から送信するのは安全ではありません。これは偽造される可能性があります。もっと簡単な方法があれば教えてください。

0 投票する
5 に答える
10356 参照

php - SSH ターミナルを閉じた後でも、websocket サーバーを実行し続けるにはどうすればよいですか?

そのため、私は PHP で Ratchet を使用しており、現在、成功した websocket の例をサーバーにアップロードしています。

SSH にアクセスしてから、「php bin/chat-server.php」を手動で実行すると機能します。

私が疑問に思っていたのは、商業的な状況で、チャット サーバーを稼働させ続けるにはどうすればよいかということです。

ありがとう。

0 投票する
1 に答える
831 参照

php - splobjectstorage 内のデータの検索

ここ数日、私は websockets と、Ratchet と呼ばれる PHP ライブラリ (PHP で websockets サーバー アプリケーションを作成するのに理想的です) について調べてきました。Ratchet の公式ドキュメントでは、クライアント接続オブジェクトの管理に SplObjectStorage (私は聞いたことがありません) を使用することを推奨しています。

ほとんどのサーバーアプリケーションでは、おそらく各クライアントに関するデータを保持する必要があります(たとえば、単純なメッセージングサーバーの作成を実験している私の場合、クライアントのニックネームなどのデータを保持する必要があります)ので、私が理解しているように以下のように、新しい接続が開かれたときに、クライアント オブジェクトとクライアント データを含む配列を SplObjectStorage に追加できます。

ただし、データ配列の値 (ユーザーのニックネームなど) によって SplObjectStorage からオブジェクトを取得する最良の方法が何であるかはわかりません。1 つの方法は次のようになります。

しかし、これを行うためのより良い方法があると思うので、アドバイスをいただければ幸いです。

前もって感謝します。

0 投票する
1 に答える
1752 参照

php - PHP WebSocket デーモン

Varnishキャッシュによって公開されたデーモンとして実行されるRatchetを使用して、phpでWebSocketサーバーをセットアップしました。

しかし、そこには大きな問題があります - PHP のスレッドの欠如です。サーバー全体をハングアップさせずに、処理のためにデータを渡すためにできることはありますか? PHPで可能ですか、それとも別のテクノロジー(たとえばnode.js)に移行する必要がありますが、メインプロジェクトがPHPにあるため、それを連携させるのは複雑です。PHP でこれを行うオプションが利用可能な場合は、それを優先してください。

0 投票する
1 に答える
504 参照

php - ZeroMQ と ClankBundle を使用して「既存のサイトへのプッシュ」を実装する方法は?

現在、Symfony2 アプリでClankBundleを使用しており、Ratchet のドキュメントに記載されている既存のサイトへのプッシュ機能を実装する必要があります。ただし、 ClankBundle を使用してこの機能を実現する方法についての手がかりは見つかりませんでした!

ClankBundle ドキュメントからTopic Handler Setupを正常に実装しましたが、 ZeroMQのサポートを追加する方法が必要です。

クランクバンドルでZeroMQを使用する方法を(できればコードで)実演していただけますか?

0 投票する
1 に答える
605 参照

php - cmd の talnet が正常に動作しているときに、ブラウザでラチェットのシェル スクリプトを実行する方法

Telnet localhost 8080 は正常に動作していますが、その後、localhost でシェル スクリプトを作成すると、firefox と chrome でエラーが表示されます。以下を参照してください。

Firefox can't establish a connection to the server at ws://localhost:8080/. var conn = new WebSocket('ws://localhost:8080');

ここに私のシェルスクリプトがあります

これが私のchat-server.phpコードです '

シェル スクリプトは root ディレクトリの info.php に保存され、chat-server.php は root/bin/ ディレクトリに保存されますが、常に同じエラーが表示されます。localhost でラチェット シェル スクリプトを実行する方法がわかりません。助けてください!