1
0
Эх сурвалжийг харах

Add laravel-websockets library

Daniel Supernault 3 жил өмнө
parent
commit
dba78e0826
4 өөрчлөгдсөн 1716 нэмэгдсэн , 130 устгасан
  1. 2 0
      composer.json
  2. 1323 46
      composer.lock
  3. 133 0
      config/telescope.php
  4. 258 84
      config/websockets.php

+ 2 - 0
composer.json

@@ -14,6 +14,7 @@
 		"ext-mbstring": "*",
 		"ext-openssl": "*",
 		"bacon/bacon-qr-code": "^2.0.3",
+		"beyondcode/laravel-websockets": "^1.13",
 		"brick/math": "^0.9.3",
 		"buzz/laravel-h-captcha": "1.0.3",
 		"doctrine/dbal": "^2.7",
@@ -45,6 +46,7 @@
 	"require-dev": {
 		"brianium/paratest": "^6.1",
 		"facade/ignition": "^2.3.6",
+		"laravel/telescope": "^4.9",
 		"mockery/mockery": "^1.0",
 		"nunomaduro/collision": "^5.0",
 		"phpunit/phpunit": "^9.0"

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 1323 - 46
composer.lock


+ 133 - 0
config/telescope.php

@@ -0,0 +1,133 @@
+<?php
+
+use Laravel\Telescope\Watchers;
+use Laravel\Telescope\Http\Middleware\Authorize;
+
+return [
+
+	'path' => 'telescope',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Telescope Storage Driver
+	|--------------------------------------------------------------------------
+	|
+	| This configuration options determines the storage driver that will
+	| be used to store Telescope's data. In addition, you may set any
+	| custom options as needed by the particular driver you choose.
+	|
+	*/
+
+	'driver' => env('TELESCOPE_DRIVER', 'database'),
+
+	'storage' => [
+		'database' => [
+			'connection' => env('DB_CONNECTION', 'mysql'),
+		],
+	],
+
+	/*
+	|--------------------------------------------------------------------------
+	| Telescope Master Switch
+	|--------------------------------------------------------------------------
+	|
+	| This option may be used to disable all Telescope watchers regardless
+	| of their individual configuration, which simply provides a single
+	| and convenient way to enable or disable Telescope data storage.
+	|
+	*/
+
+	'enabled' => env('TELESCOPE_ENABLED', false),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Telescope Route Middleware
+	|--------------------------------------------------------------------------
+	|
+	| These middleware will be assigned to every Telescope 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' => [
+		'web',
+		Authorize::class,
+	],
+
+	/*
+	|--------------------------------------------------------------------------
+	| Ignored Paths & Commands
+	|--------------------------------------------------------------------------
+	|
+	| The following array lists the URI paths and Artisan commands that will
+	| not be watched by Telescope. In addition to this list, some Laravel
+	| commands, like migrations and queue commands, are always ignored.
+	|
+	*/
+
+	'ignore_paths' => [
+		'js*',
+		'i*'
+	],
+
+	'ignore_commands' => [
+		//
+	],
+
+	/*
+	|--------------------------------------------------------------------------
+	| Telescope Watchers
+	|--------------------------------------------------------------------------
+	|
+	| The following array lists the "watchers" that will be registered with
+	| Telescope. The watchers gather the application's profile data when
+	| a request or task is executed. Feel free to customize this list.
+	|
+	*/
+
+	'watchers' => [
+		Watchers\CacheWatcher::class => env('TELESCOPE_CACHE_WATCHER', true),
+
+		Watchers\CommandWatcher::class => [
+			'enabled' => env('TELESCOPE_COMMAND_WATCHER', true),
+			'ignore' => [],
+		],
+
+		Watchers\DumpWatcher::class => env('TELESCOPE_DUMP_WATCHER', true),
+		Watchers\EventWatcher::class => env('TELESCOPE_EVENT_WATCHER', true),
+		Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true),
+		Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true),
+		Watchers\LogWatcher::class => env('TELESCOPE_LOG_WATCHER', true),
+		Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true),
+		Watchers\ClientRequestWatcher::class =>true,
+
+		Watchers\ModelWatcher::class => [
+			'enabled' => env('TELESCOPE_MODEL_WATCHER', true),
+			'events' => ['eloquent.*'],
+		],
+
+		Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true),
+
+		Watchers\QueryWatcher::class => [
+			'enabled' => env('TELESCOPE_QUERY_WATCHER', true),
+			'ignore_packages' => true,
+			'slow' => 100,
+		],
+
+		Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true),
+
+		Watchers\RequestWatcher::class => [
+			'enabled' => env('TELESCOPE_REQUEST_WATCHER', true),
+			'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64),
+		],
+
+		Watchers\GateWatcher::class => [
+			'enabled' => env('TELESCOPE_GATE_WATCHER', true),
+			'ignore_abilities' => [],
+			'ignore_packages' => true,
+		],
+
+		Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true),
+	],
+];

+ 258 - 84
config/websockets.php

@@ -1,125 +1,299 @@
 <?php
 
-use BeyondCode\LaravelWebSockets\Dashboard\Http\Middleware\Authorize;
-
 return [
 
     /*
-     * 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 can disable client events so clients cannot send
-     * messages to each other via the webSockets.
-     */
+    |--------------------------------------------------------------------------
+    | Dashboard Settings
+    |--------------------------------------------------------------------------
+    |
+    | You can configure the dashboard settings from here.
+    |
+    */
+
+    'dashboard' => [
+
+        'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001),
+
+        'domain' => env('LARAVEL_WEBSOCKETS_DOMAIN'),
+
+        'path' => env('LARAVEL_WEBSOCKETS_PATH', 'laravel-websockets'),
+
+        'middleware' => [
+            'web',
+            \BeyondCode\LaravelWebSockets\Dashboard\Http\Middleware\Authorize::class,
+        ],
+
+    ],
+
+    'managers' => [
+
+        /*
+        |--------------------------------------------------------------------------
+        | Application Manager
+        |--------------------------------------------------------------------------
+        |
+        | An Application manager determines how your websocket server allows
+        | the use of the TCP protocol based on, for example, a list of allowed
+        | applications.
+        | By default, it uses the defined array in the config file, but you can
+        | anytime implement the same interface as the class and add your own
+        | custom method to retrieve the apps.
+        |
+        */
+
+        'app' => \BeyondCode\LaravelWebSockets\Apps\ConfigAppManager::class,
+
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Applications Repository
+    |--------------------------------------------------------------------------
+    |
+    | By default, the only allowed app is the one you define with
+    | your PUSHER_* variables from .env.
+    | You can configure to use multiple apps if you need to, or use
+    | a custom App Manager that will handle the apps from a database, per se.
+    |
+    | You can apply multiple settings, like the maximum capacity, enable
+    | client-to-client messages or statistics.
+    |
+    */
+
     'apps' => [
         [
             'id' => env('PUSHER_APP_ID'),
             'name' => env('APP_NAME'),
+            'host' => env('PUSHER_APP_HOST'),
             'key' => env('PUSHER_APP_KEY'),
             'secret' => env('PUSHER_APP_SECRET'),
-            'enable_client_messages' => env('WSS_CM', false),
-            'enable_statistics' => env('WSS_STATS', false),
+            'path' => env('PUSHER_APP_PATH'),
+            'capacity' => null,
+            'enable_client_messages' => false,
+            'enable_statistics' => false,
+            'allowed_origins' => [
+                // env('LARAVEL_WEBSOCKETS_DOMAIN'),
+            ],
         ],
     ],
 
     /*
-     * 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,
+    |--------------------------------------------------------------------------
+    | Broadcasting Replication PubSub
+    |--------------------------------------------------------------------------
+    |
+    | You can enable replication to publish and subscribe to
+    | messages across the driver.
+    |
+    | By default, it is set to 'local', but you can configure it to use drivers
+    | like Redis to ensure connection between multiple instances of
+    | WebSocket servers. Just set the driver to 'redis' to enable the PubSub using Redis.
+    |
+    */
 
-    /*
-     * 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' => [
-        //
-    ],
+    'replication' => [
 
-    /*
-     * The maximum request size in kilobytes that is allowed for an incoming WebSocket request.
-     */
-    'max_request_size_in_kb' => 250,
+        'mode' => env('WEBSOCKETS_REPLICATION_MODE', 'local'),
 
-    /*
-     * This path will be used to register the necessary routes for the package.
-     */
-    'path' => 'pxws',
+        'modes' => [
+
+            /*
+            |--------------------------------------------------------------------------
+            | Local Replication
+            |--------------------------------------------------------------------------
+            |
+            | Local replication is actually a null replicator, meaning that it
+            | is the default behaviour of storing the connections into an array.
+            |
+            */
+
+            'local' => [
+
+                /*
+                |--------------------------------------------------------------------------
+                | Channel Manager
+                |--------------------------------------------------------------------------
+                |
+                | The channel manager is responsible for storing, tracking and retrieving
+                | the channels as long as their members and connections.
+                |
+                */
+
+                'channel_manager' => \BeyondCode\LaravelWebSockets\ChannelManagers\LocalChannelManager::class,
+
+                /*
+                |--------------------------------------------------------------------------
+                | Statistics Collector
+                |--------------------------------------------------------------------------
+                |
+                | The Statistics Collector will, by default, handle the incoming statistics,
+                | storing them until they will become dumped into another database, usually
+                | a MySQL database or a time-series database.
+                |
+                */
+
+                'collector' => \BeyondCode\LaravelWebSockets\Statistics\Collectors\MemoryCollector::class,
+
+            ],
+
+            'redis' => [
+
+                'connection' => env('WEBSOCKETS_REDIS_REPLICATION_CONNECTION', 'default'),
+
+                /*
+                |--------------------------------------------------------------------------
+                | Channel Manager
+                |--------------------------------------------------------------------------
+                |
+                | The channel manager is responsible for storing, tracking and retrieving
+                | the channels as long as their members and connections.
+                |
+                */
+
+                'channel_manager' => \BeyondCode\LaravelWebSockets\ChannelManagers\RedisChannelManager::class,
+
+                /*
+                |--------------------------------------------------------------------------
+                | Statistics Collector
+                |--------------------------------------------------------------------------
+                |
+                | The Statistics Collector will, by default, handle the incoming statistics,
+                | storing them until they will become dumped into another database, usually
+                | a MySQL database or a time-series database.
+                |
+                */
+
+                'collector' => \BeyondCode\LaravelWebSockets\Statistics\Collectors\RedisCollector::class,
+
+            ],
+
+        ],
 
-    /*
-     * 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' => [
-        'web',
-        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,
+        |--------------------------------------------------------------------------
+        | Statistics Store
+        |--------------------------------------------------------------------------
+        |
+        | The Statistics Store is the place where all the temporary stats will
+        | be dumped. This is a much reliable store and will be used to display
+        | graphs or handle it later on your app.
+        |
+        */
+
+        'store' => \BeyondCode\LaravelWebSockets\Statistics\Stores\DatabaseStore::class,
 
         /*
-         * Here you can specify the interval in seconds at which statistics should be logged.
-         */
+        |--------------------------------------------------------------------------
+        | Statistics Interval Period
+        |--------------------------------------------------------------------------
+        |
+        | 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.
-         */
+        |--------------------------------------------------------------------------
+        | Statistics Deletion Period
+        |--------------------------------------------------------------------------
+        |
+        | 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
-     */
+    |--------------------------------------------------------------------------
+    | Maximum Request Size
+    |--------------------------------------------------------------------------
+    |
+    | The maximum request size in kilobytes that is allowed for
+    | an incoming WebSocket request.
+    |
+    */
+
+    'max_request_size_in_kb' => 250,
+
+    /*
+    |--------------------------------------------------------------------------
+    | SSL Configuration
+    |--------------------------------------------------------------------------
+    |
+    | By default, the configuration allows only on HTTP. For SSL, you need
+    | to set up the the certificate, the key, and optionally, the passphrase
+    | for the private key.
+    | You will need to restart the server for the settings to take place.
+    |
+    */
+
     '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('WSS_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('WSS_LOCAL_PK', null),
+        'local_cert' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null),
 
-        /*
-         * Passphrase for your local_cert file.
-         */
-        'passphrase' => env('WSS_PASSPHRASE', null),
+        'capath' => env('LARAVEL_WEBSOCKETS_SSL_CA', null),
+
+        'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null),
+
+        'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null),
+
+        'verify_peer' => env('APP_ENV') === 'production',
+
+        'allow_self_signed' => env('APP_ENV') !== 'production',
 
-        'verify_peer' => env('WSS_VERIFY_PEER', false),
     ],
 
     /*
-     * 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,
+    |--------------------------------------------------------------------------
+    | Route Handlers
+    |--------------------------------------------------------------------------
+    |
+    | Here you can specify the route handlers that will take over
+    | the incoming/outgoing websocket connections. You can extend the
+    | original class and implement your own logic, alongside
+    | with the existing logic.
+    |
+    */
+
+    'handlers' => [
+
+        'websocket' => \BeyondCode\LaravelWebSockets\Server\WebSocketHandler::class,
+
+        'health' => \BeyondCode\LaravelWebSockets\Server\HealthHandler::class,
+
+        'trigger_event' => \BeyondCode\LaravelWebSockets\API\TriggerEvent::class,
+
+        'fetch_channels' => \BeyondCode\LaravelWebSockets\API\FetchChannels::class,
+
+        'fetch_channel' => \BeyondCode\LaravelWebSockets\API\FetchChannel::class,
+
+        'fetch_users' => \BeyondCode\LaravelWebSockets\API\FetchUsers::class,
+
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Promise Resolver
+    |--------------------------------------------------------------------------
+    |
+    | The promise resolver is a class that takes a input value and is
+    | able to make sure the PHP code runs async by using ->then(). You can
+    | use your own Promise Resolver. This is usually changed when you want to
+    | intercept values by the promises throughout the app, like in testing
+    | to switch from async to sync.
+    |
+    */
+
+    'promise_resolver' => \React\Promise\FulfilledPromise::class,
+
 ];

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно