-
-
Save allaniftrue/96da743022155b4c74c734d393b5c61d to your computer and use it in GitHub Desktop.
Notes on websocket implementation using Laravel-Websocket
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
BROADCAST_DRIVER=pusher | |
#PUSHER_APP_ID, PUSHER_APP_KEY, PUSHER_APP_SECRET, PUSHER_APP_CLUSTER values can be any value | |
PUSHER_APP_ID=5987234 | |
PUSHER_APP_KEY=dl52342352342334 | |
PUSHER_APP_SECRET=bc092348k625434e | |
PUSHER_APP_CLUSTER=local | |
MIX_PUSHER_APP_KEY=${PUSHER_APP_KEY} | |
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" | |
# Change to 443 | |
# if using https://docs.beyondco.de/laravel-websockets/1.0/basic-usage/ssl.html#usage-with-a-reverse-proxy-like-nginx | |
MIX_PUSHER_APP_PORT=6001 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
return [ | |
/* | |
|-------------------------------------------------------------------------- | |
| Default Broadcaster | |
|-------------------------------------------------------------------------- | |
| | |
| This option controls the default broadcaster that will be used by the | |
| framework when an event needs to be broadcast. You may set this to | |
| any of the connections defined in the "connections" array below. | |
| | |
| Supported: "pusher", "redis", "log", "null" | |
| | |
*/ | |
'default' => env('BROADCAST_DRIVER', 'null'), | |
/* | |
|-------------------------------------------------------------------------- | |
| Broadcast Connections | |
|-------------------------------------------------------------------------- | |
| | |
| Here you may define all of the broadcast connections that will be used | |
| to broadcast events to other systems or over websockets. Samples of | |
| each available type of connection are provided inside this array. | |
| | |
*/ | |
'connections' => [ | |
'pusher' => [ | |
'driver' => 'pusher', | |
'key' => env('PUSHER_APP_KEY'), | |
'secret' => env('PUSHER_APP_SECRET'), | |
'app_id' => env('PUSHER_APP_ID'), | |
'options' => [ | |
'cluster' => env('PUSHER_APP_CLUSTER'), | |
'host' => '127.0.0.1', | |
'port' => env('PUSHER_APP_PORT', 6001), | |
'scheme' => 'http' | |
], | |
], | |
'redis' => [ | |
'driver' => 'redis', | |
'connection' => 'default', | |
], | |
'log' => [ | |
'driver' => 'log', | |
], | |
'null' => [ | |
'driver' => 'null', | |
], | |
], | |
]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Echo from "laravel-echo" | |
import { PUSHER_APP_KEY, MIX_PUSHER_APP_PORT } from '~/constants' | |
import Cookies from 'js-cookie' | |
window.Pusher = require('pusher-js'); | |
const token = Cookies.get('token') | |
window.Echo = new Echo({ | |
broadcaster: 'pusher', | |
key: PUSHER_APP_KEY, | |
wsHost: window.location.hostname, | |
wsPort: MIX_PUSHER_APP_PORT, | |
wssPort: MIX_PUSHER_APP_PORT, | |
disableStats: true, | |
encrypted: true, | |
enabledTransports: ['ws', 'wss'] | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
map $http_upgrade $type { | |
default "web"; | |
websocket "ws"; | |
} | |
server { | |
root /var/www/html/example.com/public; | |
# Add index.php to the list if you are using PHP | |
index index.html index.htm index.nginx-debian.html; | |
server_name example.com; # managed by Certbot | |
index index.php; | |
location / { | |
try_files /nonexistent @$type; | |
} | |
location @web { | |
try_files $uri $uri/ /index.php?$query_string; | |
} | |
location @ws { | |
proxy_pass http://127.0.0.1:6001; | |
proxy_set_header Host $host; | |
proxy_read_timeout 60; | |
proxy_connect_timeout 60; | |
proxy_redirect off; | |
# Allow the use of websockets | |
proxy_http_version 1.1; | |
proxy_set_header Upgrade $http_upgrade; | |
proxy_set_header Connection 'upgrade'; | |
proxy_set_header Host $host; | |
proxy_cache_bypass $http_upgrade; | |
} | |
location ~ \.php$ { | |
include snippets/fastcgi-php.conf; | |
fastcgi_pass unix:/run/php/php7.2-fpm.sock; | |
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use BeyondCode\LaravelWebSockets\Dashboard\Http\Middleware\Authorize; | |
return [ | |
/* | |
* Set a custom dashboard configuration | |
*/ | |
'dashboard' => [ | |
'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001), | |
], | |
/* | |
* This package comes with multi tenancy out of the box. Here you can | |
* configure the different apps that can use the webSockets server. | |
* | |
* Optionally you specify capacity so you can limit the maximum | |
* concurrent connections for a specific app. | |
* | |
* Optionally you can disable client events so clients cannot send | |
* messages to each other via the webSockets. | |
*/ | |
'apps' => [ | |
[ | |
'id' => env('PUSHER_APP_ID'), | |
'name' => env('APP_NAME'), | |
'key' => env('PUSHER_APP_KEY'), | |
'secret' => env('PUSHER_APP_SECRET'), | |
'path' => env('PUSHER_APP_PATH'), | |
'capacity' => null, | |
'enable_client_messages' => false, | |
'enable_statistics' => true, | |
], | |
], | |
/* | |
* This class is responsible for finding the apps. The default provider | |
* will use the apps defined in this config file. | |
* | |
* You can create a custom provider by implementing the | |
* `AppProvider` interface. | |
*/ | |
'app_provider' => BeyondCode\LaravelWebSockets\Apps\ConfigAppProvider::class, | |
/* | |
* This array contains the hosts of which you want to allow incoming requests. | |
* Leave this empty if you want to accept requests from all hosts. | |
*/ | |
'allowed_origins' => [ | |
], | |
/* | |
* The maximum request size in kilobytes that is allowed for an incoming WebSocket request. | |
*/ | |
'max_request_size_in_kb' => 250, | |
/* | |
* This path will be used to register the necessary routes for the package. | |
*/ | |
'path' => 'laravel-websockets', | |
/* | |
* Dashboard Routes Middleware | |
* | |
* These middleware will be assigned to every dashboard route, giving you | |
* the chance to add your own middleware to this list or change any of | |
* the existing middleware. Or, you can simply stick with this list. | |
*/ | |
'middleware' => [ | |
'api', | |
Authorize::class, | |
], | |
'statistics' => [ | |
/* | |
* This model will be used to store the statistics of the WebSocketsServer. | |
* The only requirement is that the model should extend | |
* `WebSocketsStatisticsEntry` provided by this package. | |
*/ | |
'model' => \BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsStatisticsEntry::class, | |
/* | |
* Here you can specify the interval in seconds at which statistics should be logged. | |
*/ | |
'interval_in_seconds' => 60, | |
/* | |
* When the clean-command is executed, all recorded statistics older than | |
* the number of days specified here will be deleted. | |
*/ | |
'delete_statistics_older_than_days' => 60, | |
/* | |
* Use an DNS resolver to make the requests to the statistics logger | |
* default is to resolve everything to 127.0.0.1. | |
*/ | |
'perform_dns_lookup' => false, | |
], | |
/* | |
* Define the optional SSL context for your WebSocket connections. | |
* You can see all available options at: http://php.net/manual/en/context.ssl.php | |
*/ | |
'ssl' => [ | |
/* | |
* Path to local certificate file on filesystem. It must be a PEM encoded file which | |
* contains your certificate and private key. It can optionally contain the | |
* certificate chain of issuers. The private key also may be contained | |
* in a separate file specified by local_pk. | |
*/ | |
'local_cert' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null), | |
/* | |
* Path to local private key file on filesystem in case of separate files for | |
* certificate (local_cert) and private key. | |
*/ | |
'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null), | |
/* | |
* Passphrase for your local_cert file. | |
*/ | |
'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null), | |
], | |
/* | |
* Channel Manager | |
* This class handles how channel persistence is handled. | |
* By default, persistence is stored in an array by the running webserver. | |
* The only requirement is that the class should implement | |
* `ChannelManager` interface provided by this package. | |
*/ | |
'channel_manager' => \BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManagers\ArrayChannelManager::class, | |
]; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment