Package Data | |
---|---|
Maintainer Username: | ably |
Maintainer Contact: | support@ably.io (Ably) |
Package Create Date: | 2022-09-26 |
Package Last Update: | 2024-09-25 |
Home Page: | https://laravel.com/docs/broadcasting |
Language: | PHP |
License: | Apache-2.0 |
Last Refreshed: | 2024-11-09 15:09:57 |
Package Statistics | |
---|---|
Total Downloads: | 303,803 |
Monthly Downloads: | 24,179 |
Daily Downloads: | 785 |
Total Stars: | 49 |
Total Watchers: | 17 |
Total Forks: | 7 |
Total Open Issues: | 6 |
Ably is the platform that powers synchronized digital experiences in realtime. Whether attending an event in a virtual venue, receiving realtime financial information, or monitoring live car performance data – consumers simply expect realtime digital experiences as standard. Ably provides a suite of APIs to build, extend, and deliver powerful digital experiences in realtime for more than 250 million devices across 80 countries each month. Organizations like Bloomberg, HubSpot, Verizon, and Hopin depend on Ably’s platform to offload the growing complexity of business-critical realtime data synchronization at global scale. For more information, see the Ably documentation.
This implements ably broadcaster as a independent service provider library for Laravel using ably-php. This library works with the ably-js based ably-laravel-echo client framework with enhanced features. This project is the successor to the pusher-client based ably broadcaster.
You can install the package via composer
composer require ably/laravel-broadcaster
.env
file, set BROADCAST_DRIVER
as ably
and specify ABLY_KEY
.BROADCAST_DRIVER=ably
ABLY_KEY=ROOT_API_KEY_COPIED_FROM_ABLY_WEB_DASHBOARD
Warning - Do not expose ABLY_KEY to client code.
BroadcastServiceProvider
in config/app.php
config/broadcasting.php
, add ably
section to the connections
array 'ably' => [
'driver' => 'ably',
'key' => env('ABLY_KEY')
],
Finally, you are ready to install and configure Ably Laravel Echo, which will receive the broadcast events on the client-side.
Ably Laravel Echo is a JavaScript library that makes it painless to subscribe to channels and listen for events broadcast by your server-side broadcasting driver. Ably is maintaining a fork of the official laravel-echo module which allows you to use the official ably-js SDK. In this example, we will also install the official ably package:
npm install @ably/laravel-echo ably
Once Echo is installed, you are ready to create a fresh Echo instance in your applications JavaScript. A great place to do this is at the bottom of the resources/js/bootstrap.js
file that is included with the Laravel framework. By default, an example Echo configuration is already included in this file; however, the default configuration in the bootstrap.js
file is intended for Pusher. You may copy the configuration below to transition your configuration to Ably.
import Echo from '@ably/laravel-echo';
import * as Ably from 'ably';
window.Ably = Ably;
window.Echo = new Echo({
broadcaster: 'ably',
});
window.Echo.connector.ably.connection.on(stateChange => {
if (stateChange.current === 'connected') {
console.log('connected to ably server');
}
});
Please take a look at the Ably Laravel Echo Docs for more information related to configuring ably-specific client options and implementing additional features.
Once you have uncommented and adjusted the Echo configuration according to your needs, you may compile your application's assets:
npm run dev
1. Modify private/presence channel capability. Default: Full capability
ably-capability
. It defines list of access claims as per Channel Capabilities. // file - routes/channels.php
// User authentication is allowed for private/presence channel returning truthy values and denied for falsy values.
// for private channel
Broadcast::channel('channel1', function ($user) {
return ['ably-capability' => ["subscribe", "history"]];
});
// for presence channel
Broadcast::channel('channel2', function ($user) {
return ['id' => $user->id, 'name' => $user->name, 'ably-capability' => ["subscribe", "presence"]];
});
2. Disable public channels. Default: false
ABLY_DISABLE_PUBLIC_CHANNELS
as true in .env file. ABLY_DISABLE_PUBLIC_CHANNELS=true
config/broadcasting.php
with 'ably' => [
'driver' => 'ably',
'key' => env('ABLY_KEY'),
'disable_public_channels' => env('ABLY_DISABLE_PUBLIC_CHANNELS', false)
],
3. Update token expiry. Default: 3600 seconds (1 hr)
ABLY_TOKEN_EXPIRY
in .env file. ABLY_TOKEN_EXPIRY=21600
config/broadcasting.php
with 'ably' => [
'driver' => 'ably',
'key' => env('ABLY_KEY'),
'token_expiry' => env('ABLY_TOKEN_EXPIRY', 3600)
],
4. Use internet time for issued token expiry. Default: false
ABLY_SYNC_SERVER_TIME
as true in .env file. ABLY_SYNC_SERVER_TIME=true
config/broadcasting.php
with 'ably' => [
'driver' => 'ably',
'key' => env('ABLY_KEY'),
'sync_server_time' => env('ABLY_SYNC_SERVER_TIME', false)
],
The Ably Laravel broadcaster is designed to be compatible with all Laravel broadcasting providers, such as Pusher, Ably with the Pusher adapter, and all Pusher compatible open source broadcasters. Follow the below steps to migrate from other broadcasters.
1. Leaving a channel
To leave channel on the client side, use Ably Channel Namespaces conventions, instead of Pusher Channel Conventions.
// public channel
Echo.channel('channel1'); // subscribe to a public channel
// use this
Echo.leaveChannel("public:channel1"); // ably convention for leaving public channel
// instead of
Echo.leaveChannel("channel1"); // pusher convention for leaving public channel
// private channel
Echo.private('channel2'); // subscribe to a private channel
// use this
Echo.leaveChannel("private:channel2"); // ably convention for leaving private channel
// instead of
Echo.leaveChannel("private-channel2"); // pusher convention for leaving private channel
// presence channel
Echo.join('channel3'); // subscribe to a presence channel
// use this
Echo.leaveChannel("presence:channel3"); // ably convention for leaving presence channel
// instead of
Echo.leaveChannel("presence-channel3"); // pusher convention for leaving presence channel
2. Error handling
channel.error(error => {
if (error && error.code === 40142) { // ably token expired
console.error(error);
// take corrective action on UI
}
})
Note :
Echo.join().here(members => {})
implementation, members are updated every time a client joins, updates or leaves the channel, whereas when using Pusher this is only called once for first client entering the channel.here
Method.composer test
Please see CHANGELOG for more information what has changed recently.
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)vendor/bin/phpunit
)git push origin my-new-feature
)This library uses semantic versioning. For each release, the following needs to be done:
release/1.2.4
(where 1.2.4
is what you're releasing, being the new version).src/AblyBroadcaster.php
.github_changelog_generator
to automate the update of the CHANGELOG.md. This may require some manual intervention, both in terms of how the command is run and how the change log file is modified. Your mileage may vary:github_changelog_generator -u ably -p laravel-broadcaster --since-tag v1.2.4 --output delta.md --token $GITHUB_TOKEN_WITH_REPO_ACCESS
. Generate token here.--output delta.md
writes changes made after --since-tag
to a new file.delta.md
) then need to be manually inserted at the top of the CHANGELOG.md
, changing the "Unreleased" heading and linking with the current version numbers.HEAD
.main
.main
.git tag v1.2.4 && git push origin v1.2.4
.