I have a laravel app that was upgraded from 8 to 9. And now I'm implementing Laravel Websockets.
I have another app that is running in the same server that has websockets on port 6001 and that app works fine. This app is running websockets in port 6002.
Show below are my configuration.
composer.json
"require": {
"php": "^8.2",
"beyondcode/laravel-websockets": "^1.14",
"datatables/datatables": "^1.10",
"doctrine/dbal": "2.13.3",
"econea/nusoap": "^0.9.10",
"elibyy/tcpdf-laravel": "^9.0",
"fideloper/proxy": "^4.2",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"jenssegers/mongodb": "^3.8",
"laravel/framework": "^9.0",
"laravel/horizon": "^5.16",
"laravel/passport": "10.4.2",
"laravel/telescope": "^4.10",
"laravel/tinker": "^2.0",
"laravel/ui": "^3.0",
"livewire/livewire": "^2.9",
"maatwebsite/excel": "^3.1",
"php-flasher/flasher-laravel": "^1.15",
"php-flasher/flasher-notyf-laravel": "^1.15",
"phpmailer/phpmailer": "^6.2",
"phpoffice/phpspreadsheet": "^1.14",
"predis/predis": "^2.1",
"pusher/pusher-php-server": "^7.2",
"tymon/jwt-auth": "^1.0"
},
"devDependencies": {
"laravel-echo": "^1.15.1",
"laravel-mix": "^6.0.49",
"pusher-js": "^8.2.0",
},
Laravel Event
class TransactionProgress implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*
* @param Users $user
* @param string $action
* @param $value
*/
public function __construct(
public User $user,
public string $action,
public $value
){
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel("App.User.{$this->user->id}");
}
}
Livewire Listener
class TransactionCreate extends Component
{
public function getListeners()
{
$user = auth()->user();
return [
"echo-private:App.User.{$user->id},.App\\Events\\TransactionProgress" => "updateProgress"
];
}
public function updateProgress($event)
{
dd($event);
}
}
Dispatch
class CreateTransactionAction
{
public function execute(User $user, Transaction $transaction)
{
TransactionProgress::dispatch($user, 'incrementProgress', 10);
}
}
When I dispatch an event, I encounter a data encoding error.
Data encoding error.
Stacktrace
/var/www/html/laravel/vendor/pusher/pusher-php-server/src/Pusher.php:1089
/var/www/html/laravel/vendor/pusher/pusher-php-server/src/Pusher.php:1142
/var/www/html/laravel/vendor/pusher/pusher-php-server/src/Pusher.php:438
/var/www/html/laravel/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php:161
/var/www/html/laravel/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php:235
/var/www/html/laravel/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php:160
/var/www/html/laravel/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php:84
Exception Location:
1086 try {
1087 $data_encoded = $already_encoded ? $data : json_encode($data, JSON_THROW_ON_ERROR);
1088 } catch (\JsonException $e) {
1089 throw new PusherException('Data encoding error.');
1090 }
1091 }