Мне нужно реализовать очень простой и очень простой веб-сокет в Laravel, чтобы реализовать процесс синхронизации данных между моим приложением phonegap в качестве клиента и моим веб-сайтом Laravel в качестве сервера. Я следовал этому уроку http://www.binarytides.com/websockets-php-tutorial/ реализовать и протестировать websocket, и это работает. Как и этот, мне нужна очень простая реализация laravel, где я могу вызвать свой метод контроллера из js client. Клиент будет моим приложением для телефонной связи. Я нашел несколько пакетов для websocket в laravel с учебными пособиями, но мне было трудно их реализовать. Никто не взаимодействовал с контроллерами, они слушали события и создавали классы здесь и там, но не в контроллерах. Я написал всю свою логику в контроллере и протестировал ее с помощью ajax-запроса, но теперь я буду реализовывать ее через websocket, потому что мне нужен двунаправленный обмен данными для реализации процесса синхронизации. Я новичок в Laravel, поэтому, пожалуйста, предоставьте мне некоторую помощь. Также будет здорово, если кто-нибудь подскажет, как интегрировать учебник about в 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';
в app / start / global.php. Вы можете оставить этот шаг для Laravel 5.
Итак, веб-сокет был реализован. Вы можете проверить, запустив сервер websocket с помощью cmd, выполнив команду artisan 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/ .
Дайте мне знать, если кому-то понадобится дополнительная помощь относительно его реализации.
Других решений пока нет …