2015-11-02 7 views
14

クライアントとしての私のphonegapアプリケーションとサーバとしての私のLaravelウェブサイトの間でデータ同期プロセスを実装するために、非常に簡単で非常に基本的なwebsocketをLaravelに実装する必要があります。私はこのチュートリアルhttp://www.binarytides.com/websockets-php-tutorial/を実行してwebsocketを実装しテストしています。このように、私はjsクライアントから自分のコントローラメソッドを呼び出すことができる非常に単純なララベルの実装が必要です。クライアントは私のphonegapアプリケーションになります。私はチュートリアルでlaravelのwebsocketのパッケージをいくつか見つけましたが、実装が難しいと感じました。コントローラーと対話していた人はいませんでした。イベントを聞いていて、コントローラーではなくクラスを作成していました。コントローラにすべてのロジックを書き、Ajaxリクエストでテストしましたが、同期プロセスを実装するために双方向通信が必要なため、websocketで実装します。私はLaravelに新しいので、私にいくつかの助けを提供してください。また、クライアントが直接データを送信するためにコントローラを呼び出すことができるように、チュートリアルのチュートリアルをlaravelに統合する方法を誰かに教えてもらえればとてもうれしいでしょう。laravelのシンプルなwebsocket実装5

+0

Socket.ioをノードサーバーで実行することをお勧めします。 –

+0

クライアント側でシンプルなjsソケットを使いたいです。それはphonegapと一緒に働くので、私は物事を単純にしたいと思っています。 – hassan

+0

実際にsocket.ioを使用すると、ごくわずかなコードでWebsocket接続ができます。それが私が個人的に実装した方法です。 –

答えて

18

私はbrainboxlabsのbrainsocket(https://github.com/BrainBoxLabs/brain-socket)を使い終わった。そのドキュメントにはlaravel 4パッケージが記載されていますが、laravel 5でも問題なく動作します。

このパッケージをlaravelとともにインストールするには5.上記githubのリンクのドキュメントに従ってください。アプリケーションフォルダ内にevent.phpファイルを作成し、いくつかのイベント関連のコードを作成すると言うところです。この手順の代わりに、イベント関連のコードをapp/Providers/EventServiceProvider.phpファイルに追加するだけです。その起動方法において、

Event::listen('generic.event',function($client_data){ 
    return BrainSocket::message('generic.event',array('message'=>'A message from a generic event fired in Laravel!')); 
}); 

Event::listen('app.success',function($client_data){ 
    return BrainSocket::success(array('There was a Laravel App Success Event!')); 
}); 

Event::listen('app.error',function($client_data){ 
    return BrainSocket::error(array('There was a Laravel App Error!')); 
}); 

このステップの後APP /スタート/ global.phpに

require app_path().'/filters.php'; 
require app_path().'/events.php'; 

を添加する工程があったされたコードを追加します。このステップをLaravel 5のままにしておくことができます。

これでWebソケットが実装されました。コマンドartisan brainsocket:startを実行して、cmdを使用してwebsocketサーバを起動することでテストできます。必要に応じてport artisan brainsocketを提供することができます。start 9000

もう1つの要件は、残りのタスクを実行するためにコントローラを呼び出すことでした。このため私はプロバイダパッケージに直接編集しました。私はこれが良い方法ではないので、これをお勧めしません。コンポーザーを使用してパッケージを更新すると、変更が失われます。だから、より良い選択肢を見つけなければなりません。しかし、その1行だけが変更されます。ベンダーの\ brainboxlabsで

\脳ソケット\ SRC \ BrainSocket \ BrainSocketServer.php私は "開始" と

$this->server = IoServer::factory(
      new HttpServer(
       new WsServer(
       new \FMIS\Http\Controllers\SynchronizationController(
        new BrainSocketResponse(new LaravelEventPublisher()) 
              ) 
       ) 
      ) 
      , $port 
     ); 

そして、私のSynchronizationControllerファイル内で

$this->server = IoServer::factory(
      new HttpServer(
       new WsServer(
        new BrainSocketEventListener(
         new BrainSocketResponse(new LaravelEventPublisher()) 
        ) 
       ) 
      ) 
      , $port 
     ); 

を置き換える方法でコードを編集しました。

私はこのようなトップ

use Ratchet\MessageComponentInterface; 
use Ratchet\ConnectionInterface; 
use BrainSocket\BrainSocketResponseInterface; 

実装されたインタフェース上でこれを追加しました。

class SynchronizationController extends Controller implements MessageComponentInterface{ 

このメソッドのメソッドを実装しました。

機能を実装するには、これらの方法を変更する必要があります。その後、jsクライアントから電話をかけることができます。また、jsライブラリを使用する必要はありません。このチュートリアルhttp://www.binarytides.com/websockets-php-tutorial/で説明されているjsクライアントを使用してデータを送信するだけです。

誰かがその実装に関してもう助けを必要としているかどうかを教えてください。

+0

おい、すばらしい説明。 +1。ベンダーのファイルを実際に変更することなくコントローラを使用できるかどうか疑問に思っていましたか? laravelの更新を自由にインストールすることができます。ご協力いただきありがとうございます。 – Learner

+0

@Learnerでは、brainSocketクラスを拡張するカスタムソケットクラスとコマンドを作成できます。自分ではできませんが、それを見て、私がやることです。 – sourRaspberri

+0

残念ながら、BrainSocketはLaravel 5.5で動作するようにソースを更新していません... – AmjadoV

関連する問題