2013-09-23 30 views
27

私はLaravel 4で書かれたWebアプリケーションを手に入れました。このアプリケーションは、ラチェットを使用しており、より具体的には、パッケージLatchetを使用しています。追記として、私は次の方法を使用しています:私がすべきスライドショーを持ってウェブソケットを使用する場合のベストプラクティス?

  • AutoBahn JS
  • ZeroMQ
  • Ratchetは今、私は次のシナリオを得ました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つのオプションのうちの後者は、私にとって最良の選択肢だと思われますが、これをどのようにして良い方法で実装するのか分かりません。

+0

もっと回答がありましたら幸いです。私はlaravelでウェブソケットを実装する旅を始めています。私はほとんど分かりませんが、私の検索は続けられます。 –

+0

間違いなく更新してください! –

+0

まあ、間違いなくBrainSocketsは使用しないでください。彼らはv1.0になっていると言いますが、サーバーをプッシュすることは不可能です。別のソケットプラグインを試してみると、私は戻ってきます。 –

答えて

5

ではJavaScript側では(最初のリストを取得するには):PHP側では

//session.subscribe(....) 

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

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

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に注意してください。パラメータはフィルタリングされないかもしれません。

0

あなたの質問を正しい方法で理解できれば、これは次のとおりです。Websocketを介して画像を送信することは、PHPからプリロードすることもできますか?

websocketを使わずに画像をプリロードすることをお勧めします。新しい画像が追加されると、ソケットを使い始めるでしょう。

この方法では、ページがロードされた瞬間からイメージが表示され、WebSocket接続が確立されるのを待つ必要はありません。

ソケットを使ってロードすることをお望みなら、スライダーから最初のいくつかのイメージをロードすることをお勧めします。これはPHPからすぐに見ることができます。さもなければ、ユーザーはもっと長く待たなければなりません(それには注意してください。

関連する問題