Closed ritwikBiswas007 closed 4 months ago
Are you using the secure WebSockets (e.g wss://
)? If so, can you change REVERB_SCHEME=https
Yes I am using wss. Connection is successfully established. Received pusher ping pong event also. But not receiving the broadcast events
Hey @ritwikBiswas007 do you have your queue running?
Yes I am running queue:work
It is running properly
Hi! I think this is same what I’m been struggled hours last few days! Here is some more details how this can be reproduced: Fresh install of Laravel 11, laravel/breeze + reverb. Link project to valet and change env REVERB_HOST to match your project and set REVERB_SCHEME to https. Create TestEvent -> add ShouldBroadcast interface and change PrivateChannel to Channel. Start reverb, run php artisan queue:work and from tinker dispatch TestEvent. From logs you can find this error: local.ERROR: cURL error 56: OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0 Here is full stacktrace:
[2024-04-19 04:34:09] local.ERROR: cURL error 56: OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0 (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://reverb-test.test:8080/apps/687468/events?auth_key=0ejtmavz8uzypitj07ka&auth_timestamp=1713501249&auth_version=1.0&body_md5=290a36791f069f26dc79082e40601c21&auth_signature=730210447b33447088602b095990bc583d6e1e39ef34c21e8ff7afcdcbf9e1f6 {"exception":"[object] (GuzzleHttp\\Exception\\RequestException(code: 0): cURL error 56: OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0 (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://reverb-test.test:8080/apps/687468/events?auth_key=0ejtmavz8uzypitj07ka&auth_timestamp=1713501249&auth_version=1.0&body_md5=290a36791f069f26dc79082e40601c21&auth_signature=730210447b33447088602b095990bc583d6e1e39ef34c21e8ff7afcdcbf9e1f6 at /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:211)
[stacktrace]
#0 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(158): GuzzleHttp\\Handler\\CurlFactory::createRejection(Object(GuzzleHttp\\Handler\\EasyHandle), Array)
#1 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(110): GuzzleHttp\\Handler\\CurlFactory::finishError(Object(GuzzleHttp\\Handler\\CurlHandler), Object(GuzzleHttp\\Handler\\EasyHandle), Object(GuzzleHttp\\Handler\\CurlFactory))
#2 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php(47): GuzzleHttp\\Handler\\CurlFactory::finish(Object(GuzzleHttp\\Handler\\CurlHandler), Object(GuzzleHttp\\Handler\\EasyHandle), Object(GuzzleHttp\\Handler\\CurlFactory))
#3 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php(28): GuzzleHttp\\Handler\\CurlHandler->__invoke(Object(GuzzleHttp\\Psr7\\Request), Array)
#4 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php(48): GuzzleHttp\\Handler\\Proxy::GuzzleHttp\\Handler\\{closure}(Object(GuzzleHttp\\Psr7\\Request), Array)
#5 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php(64): GuzzleHttp\\Handler\\Proxy::GuzzleHttp\\Handler\\{closure}(Object(GuzzleHttp\\Psr7\\Request), Array)
#6 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/Middleware.php(31): GuzzleHttp\\PrepareBodyMiddleware->__invoke(Object(GuzzleHttp\\Psr7\\Request), Array)
#7 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php(71): GuzzleHttp\\Middleware::GuzzleHttp\\{closure}(Object(GuzzleHttp\\Psr7\\Request), Array)
#8 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/Middleware.php(63): GuzzleHttp\\RedirectMiddleware->__invoke(Object(GuzzleHttp\\Psr7\\Request), Array)
#9 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/HandlerStack.php(75): GuzzleHttp\\Middleware::GuzzleHttp\\{closure}(Object(GuzzleHttp\\Psr7\\Request), Array)
#10 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/Client.php(333): GuzzleHttp\\HandlerStack->__invoke(Object(GuzzleHttp\\Psr7\\Request), Array)
#11 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/Client.php(169): GuzzleHttp\\Client->transfer(Object(GuzzleHttp\\Psr7\\Request), Array)
#12 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/Client.php(189): GuzzleHttp\\Client->requestAsync('POST', Object(GuzzleHttp\\Psr7\\Uri), Array)
#13 /Users/juser/code/reverb-test/vendor/guzzlehttp/guzzle/src/ClientTrait.php(95): GuzzleHttp\\Client->request('POST', 'apps/687468/eve...', Array)
#14 /Users/juser/code/reverb-test/vendor/pusher/pusher-php-server/src/Pusher.php(776): GuzzleHttp\\Client->post('apps/687468/eve...', Array)
#15 /Users/juser/code/reverb-test/vendor/pusher/pusher-php-server/src/Pusher.php(441): Pusher\\Pusher->post('/apps/687468/ev...', '{\"name\":\"App\\\\\\\\E...')
#16 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php(161): Pusher\\Pusher->trigger(Array, 'App\\\\Events\\\\Test...', Array, Array)
#17 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php(237): Illuminate\\Broadcasting\\Broadcasters\\PusherBroadcaster->Illuminate\\Broadcasting\\Broadcasters\\{closure}(Object(Illuminate\\Support\\Collection), 0)
#18 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php(160): Illuminate\\Support\\Collection->each(Object(Closure))
#19 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php(92): Illuminate\\Broadcasting\\Broadcasters\\PusherBroadcaster->broadcast(Object(Illuminate\\Support\\Collection), 'App\\\\Events\\\\Test...', Array)
#20 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\Broadcasting\\BroadcastEvent->handle(Object(Illuminate\\Broadcasting\\BroadcastManager))
#21 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#22 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#23 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#24 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Container/Container.php(662): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#25 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(128): Illuminate\\Container\\Container->call(Array)
#26 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Bus\\Dispatcher->Illuminate\\Bus\\{closure}(Object(Illuminate\\Broadcasting\\BroadcastEvent))
#27 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Broadcasting\\BroadcastEvent))
#28 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(132): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#29 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(124): Illuminate\\Bus\\Dispatcher->dispatchNow(Object(Illuminate\\Broadcasting\\BroadcastEvent), false)
#30 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Queue\\CallQueuedHandler->Illuminate\\Queue\\{closure}(Object(Illuminate\\Broadcasting\\BroadcastEvent))
#31 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Broadcasting\\BroadcastEvent))
#32 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(123): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#33 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(71): Illuminate\\Queue\\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\\Queue\\Jobs\\DatabaseJob), Object(Illuminate\\Broadcasting\\BroadcastEvent))
#34 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\\Queue\\CallQueuedHandler->call(Object(Illuminate\\Queue\\Jobs\\DatabaseJob), Array)
#35 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(439): Illuminate\\Queue\\Jobs\\Job->fire()
#36 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(389): Illuminate\\Queue\\Worker->process('database', Object(Illuminate\\Queue\\Jobs\\DatabaseJob), Object(Illuminate\\Queue\\WorkerOptions))
#37 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(176): Illuminate\\Queue\\Worker->runJob(Object(Illuminate\\Queue\\Jobs\\DatabaseJob), 'database', Object(Illuminate\\Queue\\WorkerOptions))
#38 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(139): Illuminate\\Queue\\Worker->daemon('database', 'default', Object(Illuminate\\Queue\\WorkerOptions))
#39 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(122): Illuminate\\Queue\\Console\\WorkCommand->runWorker('database', 'default')
#40 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\Queue\\Console\\WorkCommand->handle()
#41 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#42 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#43 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#44 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Container/Container.php(662): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#45 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Console/Command.php(212): Illuminate\\Container\\Container->call(Array)
#46 /Users/juser/code/reverb-test/vendor/symfony/console/Command/Command.php(279): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#47 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Console/Command.php(181): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#48 /Users/juser/code/reverb-test/vendor/symfony/console/Application.php(1049): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#49 /Users/juser/code/reverb-test/vendor/symfony/console/Application.php(318): Symfony\\Component\\Console\\Application->doRunCommand(Object(Illuminate\\Queue\\Console\\WorkCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#50 /Users/juser/code/reverb-test/vendor/symfony/console/Application.php(169): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#51 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(196): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#52 /Users/juser/code/reverb-test/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1183): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#53 /Users/juser/code/reverb-test/artisan(13): Illuminate\\Foundation\\Application->handleCommand(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#54 {main}
"}
I am not getting any error
an not receving any events also 😂
When I added BROADCAST_CONNECTION=reverb I am getting this error in failed jobs
`Illuminate\Broadcasting\BroadcastException: Pusher error: cURL error 35: OpenSSL/3.2.1: error:80000002:system library::No such file or directory (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://retail_zepay.test:3030/apps/365696/events?auth_key=pmqwvmumzdefdifc7yki&auth_timestamp=1713506322&auth_version=1.0&body_md5=5b62639d48c26adca88e7654001e653f&auth_signature=6c4a495977ac90a504e6892d2dba07f0e237c6812fdecace85de15c7224a8638. in /Users/ritwikbiswas/Desktop/RBSS Infotech/retail_zepay/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php:164 Stack trace:
It looks like there is an issue with Curl negotiating the SSL handshake with your custom certificate.
I fixed by adding 'verify' => false, to client_options in broadcasting.php file
Reverb Version
@beta
Laravel Version
^11.0
PHP Version
8.2.1
Description
ENV File ` APP_NAME="Zepay Retail" APP_ENV=local APP_KEY=base64:epjDRbsy3TMxBhFYBoNgzR+FgHKrKgJzF359h3RUq3g= APP_DEBUG=true APP_URL=https://retail_zepay.test ASSET_URL=https://retail_zepay.test SPLADE_SSR_ENABLED=true LOG_CHANNEL=stack LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug
DB_CONNECTION=mysql DB_PORT=3306 DB_DATABASE=retail_zepay DB_USERNAME=ritwik DB_PASSWORD=
BROADCAST_DRIVER=reverb CACHE_DRIVER=file FILESYSTEM_DISK=local QUEUE_CONNECTION=database SESSION_DRIVER=file SESSION_LIFETIME=120 BROADCAST_CONNECTION=reverb FILESYSTEM_DISK=local
MEMCACHED_HOST=memcached
REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379
MAIL_MAILER=smtp MAIL_HOST=sandbox.smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=1d2039c73f1352 MAIL_PASSWORD=d94966202d6d4c MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS="no-reply@zepay.money" MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= AWS_USE_PATH_STYLE_ENDPOINT=false
PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_HOST= PUSHER_PORT=8080 PUSHER_SCHEME=http PUSHER_APP_CLUSTER=mt1
VITE_APP_NAME="${APP_NAME}" VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" VITE_PUSHER_HOST="${PUSHER_HOST}" VITE_PUSHER_PORT="${PUSHER_PORT}" VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
REVERB_APP_ID=365696 REVERB_APP_KEY=pmqwvmumzdefdifc7yki REVERB_APP_SECRET=nhvtrzvta3a2v3htyy4s REVERB_HOST=retail_zepay.test REVERB_PORT=3030 REVERB_SERVER_PORT=3030 REVERB_SCHEME=http REVERB_SSL_LOCAL_CERT="/Users/ritwikbiswas/.config/valet/Certificates/retail_zepay.test.crt" REVERB_SSL_LOCAL_PK="/Users/ritwikbiswas/.config/valet/Certificates/retail_zepay.test.key" REVERB_SSL_CA="/Users/ritwikbiswas/.config/valet/Certificates/retail_zepay.test.csr"
VITE_REVERB_APP_KEY="${REVERB_APP_KEY}" VITE_REVERB_HOST="${REVERB_HOST}" VITE_REVERB_PORT="${REVERB_PORT}" VITE_REVERB_SCHEME="${REVERB_SCHEME}"
MPLAN_API_KEY=62dd4fc6872957028d7248ccc8c05bdf ENABLE_2FA_QR=true
User Notification Event
` <?php
namespace App\Events;
use App\Models\Notification; use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Log;
class UserNotification implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels;
} `
Channels.php file
` <?php
use App\Models\Notification; use Illuminate\Support\Facades\Broadcast;
*/
// Broadcast::channel('App.Models.User.{id}', function ($user, $id) { // return (int) $user->id === (int) $id; // });
Broadcast::channel('user-notification.{userId}', function ($user, $userId) { return true; });
`
Broadcast Service Provider
` <?php
namespace App\Providers;
use Illuminate\Support\Facades\Broadcast; use Illuminate\Support\ServiceProvider;
class BroadcastServiceProvider extends ServiceProvider { /**
Bootstrap any application services. */ public function boot(): void { Broadcast::routes();
} }
`
Echo.js
` import Echo from 'laravel-echo'; import Pusher from 'pusher-js'; window.Pusher = Pusher;
window.Echo = new Echo({ broadcaster: 'reverb', key: import.meta.env.VITE_REVERB_APP_KEY, wsHost: import.meta.env.VITE_REVERB_HOST, wsPort: import.meta.env.VITE_REVERB_PORT ?? 80, wssPort: import.meta.env.VITE_REVERB_PORT ?? 443, forceTLS: (import.meta.env.VITE_REVERB_SCHEME ?? 'https') === 'https', enabledTransports: ['ws', 'wss'], });
window.Echo.connector.pusher.connection.bind('error', function(err) { console.log('WebSocket Error', err); });
window.Echo.private('user-notification.1') .listen('.UserNotification', (e) => { console.log(e); }); `
reverb config
` <?php
return [
];
`
Broadcasting config
` <?php
return [
];
`
Steps To Reproduce
Use Above Config & setup laravel with reverb & echo, You will find the issue