Простая реализация websocket в laravel 5

Мне нужно реализовать очень простой и очень простой websocket в Laravel, чтобы реализовать процесс синхронизации данных между моим телефоновым приложением как клиентом и моим веб-сайтом Laravel в качестве сервера. Я выполнил этот учебник http://www.binarytides.com/websockets-php-tutorial/, чтобы реализовать и протестировать websocket, и он работает. Как и этот, мне нужна очень простая реализация laravel, где я могу вызвать свой метод контроллера из js-клиента. Клиент будет моим телефоном. Я нашел несколько пакетов для websocket в laravel с учебниками, но мне было сложно их реализовать. Никто не взаимодействовал с контроллерами, они слушали события и создавали классы здесь и там, но не в контроллерах. Я написал всю свою логику в контроллере и протестировал его с помощью ajax-запроса, но теперь я буду реализовывать его с помощью websocket, потому что мне нужна двунаправленная связь для реализации процесса синхронизации. Я новичок в Laravel, поэтому, пожалуйста, предоставьте мне некоторую помощь. Также это будет так здорово, если кто-нибудь сможет мне рассказать, как интегрировать учебник в laravel так, чтобы клиент мог напрямую вызвать контроллер для отправки данных.

Я закончил использовать мозговой набор brainboxlabs ( 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!')); }); 

После этого шага был добавлен шаг добавления

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

в приложении / start / global.php. Вы можете оставить этот шаг для laravel 5.

Итак, веб-сокет был реализован. Вы можете протестировать, запустив сервер websocket с помощью cmd, выполнив команду artisan brainsocket:start . Вы можете опционально предоставить ему портфолио мастеров порта: start 9000

Другое требование заключалось в том, чтобы вызвать контроллер для выполнения остальной части задачи. Для этого я напрямую редактировался в пакет провайдера. Я не рекомендую это, так как это не очень хорошо. Когда вы обновите свой пакет с помощью композитора, ваши изменения будут потеряны. Поэтому вам нужно найти лучший вариант. Но его только одна строка меняется.

В вендоре \ 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 client, описанных в этом учебнике http://www.binarytides.com/websockets-php-tutorial/ .

Дайте мне знать, если кто-то нуждается в дополнительной помощи в отношении ее реализации.