クライアントとしてのphonegapアプリとサーバーとしてのLaravelウェブサイト間のデータ同期プロセスを実装するには、Laravelに非常にシンプルで非常に基本的なwebsocketを実装する必要があります。私はこのチュートリアルに従いました http://www.binarytides.com/websockets-php-tutorial/ websocketを実装してテストすると動作します。このように、jsクライアントからコントローラーメソッドを呼び出すことができる非常に簡単なlaravel実装が必要です。クライアントはphonegapアプリケーションになります。チュートリアルでlaravelにwebsocketのパッケージをいくつか見つけましたが、実装が難しいと感じました。コントローラーと対話する人はいませんでした。コントローラーを使用せずに、イベントをリッスンし、あちこちでクラスを作成していました。すべてのロジックをコントローラーで作成し、ajaxリクエストでテストしましたが、同期プロセスを実装するには双方向通信が必要なため、websocketで実装します。私はLaravelが初めてなので、助けてください。また、クライアントがデータを送信するためにコントローラーを直接呼び出すことができるように、誰かがlaravelのaboutチュートリアルを統合する方法を教えてくれるととても素晴らしいです。
結局、brainboxlabsのbrainsocket( https://github.com/BrainBoxLabs/brain-socket )を使用することになりました。その文書では、laravel 4パッケージですが、laravel 5でも問題なく動作します。
このパッケージをlaravel 5.でインストールするにはそのイベント関連のコードをapp/Providers/EventServiceProvider.phpファイルに追加します。そのbootメソッドで、
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!'));
});
このステップの後、追加するステップがありました
require app_path().'/filters.php';
require app_path().'/events.php';
app/start/global.phpにあります。このステップは、laravel 5。
OK、Webソケットが実装されました。コマンドartisan brainsocket:start
を実行して、cmdを使用してwebsocketサーバーを起動することでテストできます。オプションで、ポート職人brainsocket:start 9000を提供できます。
別の要件は、コントローラーを呼び出して残りのタスクを実行することでした。このため、プロバイダーパッケージに直接編集しました。これは良い方法ではないのでお勧めしません。 composerを使用してパッケージを更新する場合、変更は失われます。したがって、より良いオプションを見つける必要があります。
Vendor\brainboxlabs\brain-socket\src\BrainSocket\BrainSocketServer.phpで、メソッド「start」のコードを編集して置き換えます
$this->server = IoServer::factory(
new HttpServer(
new WsServer(
new BrainSocketEventListener(
new BrainSocketResponse(new LaravelEventPublisher())
)
)
)
, $port
);
と
$this->server = IoServer::factory(
new HttpServer(
new WsServer(
new \FMIS\Http\Controllers\SynchronizationController(
new BrainSocketResponse(new LaravelEventPublisher())
)
)
)
, $port
);
そして、SynchronizationControllerファイル内。
これを上に追加しました
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
use BrainSocket\BrainSocketResponseInterface;
このようなインターフェースを実装しました。
class SynchronizationController extends Controller implements MessageComponentInterface{
このインターフェースのメソッドを実装しました。
public function __construct(BrainSocketResponseInterface $response) {
$this->clients = new \SplObjectStorage;
$this->response = $response;
}
public function onOpen(ConnectionInterface $conn) {
echo "Connection Established! \n";
}
public function onMessage(ConnectionInterface $conn, $msg){
echo "this messge gets called whenever there is a messge sent from js client";
}
public function onClose(ConnectionInterface $conn) {
echo "Connection {$conn->resourceId} has disconnected\n";
}
public function onError(ConnectionInterface $conn, \Exception $e) {
$msg = "An error has occurred: {$e->getMessage()}\n";
echo $msg;
$conn->close();
}
機能を実装するには、これらのメソッドを変更する必要があります。この後、jsクライアントから呼び出すことができます。また、jsライブラリも使用する必要はありません。このチュートリアルで説明するjsクライアントを使用してデータを送信するだけです http://www.binarytides.com/websockets-php-tutorial/ .
実装に関して誰か他に助けが必要かどうか教えてください。