Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

gasparyanyur's avatar

Listening socket via Laravel Events

Hi all. I have a code look like this

Event File:

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class ApiDataListener implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;


    public $data;


    /**
     * Create a new event instance.
     * @param $event string
     * @param $data array
     * @return void
     */
    public function __construct($event,$data)
    {
        $this->data = [
            'event' => $event,
            'data' => $data
        ];
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return ['api-data'];
    }
}

JS file

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();
redis.subscribe('api-data');

redis.on('message', function(channel, message) {
    message = JSON.parse(message);
    io.emit(channel + ':' + message.event, message.data);
});
http.listen(3000, function(){
    console.log('Listening on Port 3000');
});

And in my blade template I have a javascript code look like this

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js"></script>
    <script src="{{ asset('js/app.js') }}"></script>

    <script>
        var socket = io.connect('http://even.loc:3000');

        socket.on('api-data:App\Events\ApiDataListener', function (data) {
            console.log(data);
        });
    </script>

So I have an custom artisan command which sent my new data by socket via event function

event( new \App\Events\ApiDataListener( $event,
                [ 'model' => $data ]
            ) );

All is working good. But I cant send data to my socket listener to process my data

I think I need to have a code look like this, but I cant get my data in my listener'

socket.emit('event-name',{data:data})

I apologize if the question is not relevant, I just never worked with the socket.

0 likes
0 replies

Please or to participate in this conversation.