是否可以在 laravel echo 中向通道发送数据?

我有两个单独的 laravel 项目,并安装在其中一个项目laravel-echo和另一个项目上laravel-echo-server。


我将这个项目连接在一起并将数据从服务器传输到客户端,但我无法将数据从客户端发送到服务器。


服务器中的事件:


class TestEvent implements ShouldBroadcast

{

    use Dispatchable, InteractsWithSockets, SerializesModels;


    public $prices;


    /**

     * Create a new event instance.

     *

     * @param int[] $prices

     */

    public function __construct($prices = ['a' => 11000, 'b' => 420])

    {

        $this->prices = $prices;

    }


    /**

     * Get the channels the event should broadcast on.

     *

     * @return \Illuminate\Broadcasting\Channel|array

     */

    public function broadcastOn()

    {

        return new PresenceChannel('bla-bla');

    }


    public function broadcastAs()

    {

        return 'financial.prices';

    }

}

服务器中的路线:


Route::get('/fire', function () {


    $prices = [

        'a' => rand(11000, 120000),

        'b' => rand(450, 5000)

    ];

    event(new \App\Events\TestEvent($prices));

    return 'done';

});

客户:


import Echo from 'laravel-echo';


window.io = require('socket.io-client');


window.Echo = new Echo({

    broadcaster: 'socket.io',

    host: window.location.hostname + ':6001',

    logToConsole: true

});


window.Echo.logToConsole = true;


window.Echo.join('bla-bla')

    .here((data) => {

        console.log('asdasd');

    })

    .joining((data) => {

        console.log('asdasd');

    })

    .leaving((data) => {

        console.log('asdasd');

    });

我怎样才能做到这一点?如果有人能给我建议,我将不胜感激!😊


守候你守候我
浏览 86回答 3
3回答

梵蒂冈之花

连接到套接字服务器后需要使用emit:window.io = require('socket.io-client');const socket = io('https://localhost:8080');socket.on('connect', () => {    socket.emit('your_channel_to_emit', {your_data});});

慕的地6264312

将其添加到您的事件 (App\EventName):public function broadcastWith(){    return [        'data' => "your data",        'moredata' => "more data",    ];}并在 JS 中像这样访问您的数据:Echo.channel('channel-name')    .listen('EventName', (event) => {        console.log(event.data);        console.log(event.moredata);        console.log(event['moredata']);    }

开心每一天1111

默认情况下,Echo 将使用/broadcasting/auth端点来授权通道访问。如果您的客户端不在同一主机上,您将必须自定义推送器的 authEndpoint。authEndpoint您可以通过将配置选项传递给您的 Echo 实例来指定您自己的授权端点:window.Echo = new Echo({    broadcaster: 'pusher',    key: 'your-pusher-channels-key',    authEndpoint: '/custom/endpoint/auth', //customize here.});
打开App,查看更多内容
随时随地看视频慕课网APP