首页 > 解决方案 > 使用 socket.io 为 laravel echo 发出事件

问题描述

我正在尝试在存在通道上使用 laravel echo实现像这样的实时白板https://socket.io/demos/whiteboard/ 。问题是,当另一个用户正在绘图时,我如何发出事件,因为在示例中它使用socket.emit('drawing;,...)。我知道应该在控制器中触发该事件,但我不太确定通过 http(ajax) 发送事件是否是一个好主意,因为每次有人绘制时,都会发送一个 http 请求。这里有解决方法吗?或者我错过了一些东西。

索引刀片.php

Echo.join(`consultation`)
    .listen('drawing',(e)=>{
        onDrawingEvent(e)
    })

var socket = io(window.location.hostname + ':6001');

window.addEventListener('resize', onResize, false);
onResize();

function drawLine(x0, y0, x1, y1, color, emit){
    context.beginPath();
    context.moveTo(x0, y0);
    context.lineTo(x1, y1);
    context.strokeStyle = color;
    context.lineWidth = 2;
    context.stroke();
    context.closePath();

    if (!emit) { return; }
    var w = canvas.width;
    var h = canvas.height;

    socket.emit('drawing', {
    x0: x0 / w,
    y0: y0 / h,
    x1: x1 / w,
    y1: y1 / h,
    color: color
    });
    console.log(1);
}

function onDrawingEvent(data){
    console.log(2);
    var w = canvas.width;
    var h = canvas.height;
    drawLine(data.x0 * w, data.y0 * h, data.x1 * w, data.y1 * h, data.color);
}

频道.php

Broadcast::channel('consultation', function ($user) {
   return $user;
});

标签: phplaravelwebsocketsocket.iolaravel-blade

解决方案


推荐阅读