28

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

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

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

    //routes.php
    // Setup a connection and register a topic where clients can connect to.
    Latchet::connection('Connection');
    Latchet::topic('PhotoStream/{client}', 'PhotoStreamController');
    
  • 次に、ラチェット サーバーを起動します。

sudo php artisan latchet:listen

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

// Create the object, save it to db and then publish it to my websockets
$photo = new Photo;
$photo->location = 'path/to/file';
$photo->save();
// Publish it through my websocket clients. (push from server).
Latchet::publish('PhotoStream/client1', array('msg' => $photo->toArray() ));

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

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

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

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

4

2 に答える 2

5

JavaScript 側 (初期リストを取得するため):

//session.subscribe(....)

session.call('route/to/controller', arg1, arg2).then(function(res) {
   console.log(res) //initial collection of photos
});

PHP 側 (初期リストを取得するため):

public function call($connection, $id, $topic, $params) {
    //the id is needed to be able to trace your async calls back to the right promise
    $connection->callResult($id, $this->getInitialPhotosFilteredByParams($params));
});

サブスクライブを介して既に正常に更新を取得しているので、必要なのはこれだけです。xss には注意してください。params はフィルタリングされない可能性があります。

于 2014-02-21T00:36:14.803 に答える
0

あなたの質問が正しい方法で理解されていれば、これはそれです.Websocketを介して画像を送信することは、それらの画像をPHPからプリロードすることもできる場合、良い考えであるかどうか疑問に思っています.

Websocket を使用せずに PHP を使用して画像をプリロードし、新しい画像が追加されたらソケットの使用を開始することをお勧めします。

このようにして、ユーザーはページがロードされた瞬間から画像を表示する必要があり、websocket 接続が確立されるのを待つ必要はありません。

ソケットを介して読み込みを行う場合でも、スライダーから最初のいくつかの画像を読み込むことをお勧めします。これは、PHP からすぐに確認できます。そうしないと、ユーザーはより長く待たなければならなくなります (それだけ注意してください。ただし、それでもかなり長くなります)。

于 2016-05-10T08:20:12.507 に答える