supportpal/pollcast

Laravel broadcasting driver suitable for restricted hosting environments.

v1.2.3 2024-03-11 14:46 UTC

README


Pollcast. A Laravel broadcast driver using short polling.

Build Status Total Downloads Latest Stable Version License

Pollcast

"Pollcast" is short for XHR polling using Laravel Broadcasting.

Motivation

Laravel supports several broadcast drivers, but all of these either require integration with a third party service such as Pusher, or installation of additional software. The motivation behind this package is to provide a broadcast driver which works in all environments without additional configuration and is compatible with Laravel Echo.

In most cases, where you have control over the environment, you'll want to use web sockets.

Installation

Require this package with composer:

composer require supportpal/pollcast

Add the ServiceProvider class to the providers array in config/app.php. In Laravel versions 5.5 and beyond, this step can be skipped if package auto-discovery is enabled.

\SupportPal\Pollcast\ServiceProvider::class,

Change the default broadcast driver to in your .env file:

BROADCAST_DRIVER=pollcast

Add the database tables:

php artisan migrate --path=vendor/supportpal/pollcast/database/migrations

Finally, publish the config file config/pollcast.php if required:

php artisan vendor:publish --provider="SupportPal\Pollcast\ServiceProvider"

Usage

Require the pollcast-js package:

npm i --save pollcast-js laravel-echo

Create a fresh Laravel Echo instance and provide the PollcastConnector as the broadcaster:

import Echo from 'laravel-echo';
import PollcastConnector from 'pollcast-js'

window.Echo = new Echo({
  broadcaster: PollcastConnector,
  csrfToken: "{{ csrf_token() }}",
  routes: {
    connect: "{{ route('supportpal.pollcast.connect') }}",
    receive: "{{ route('supportpal.pollcast.receive') }}",
    publish: "{{ route('supportpal.pollcast.publish') }}",
    subscribe: "{{ route('supportpal.pollcast.subscribe') }}",
    unsubscribe: "{{ route('supportpal.pollcast.unsubscribe') }}"
  },
    polling: {{ Config.get('pollcast.polling_interval', 5000) }}
});