php - 使用 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;
});
解决方案
推荐阅读
- javascript - 仅包含来自 IPv6 和 IPv4 的源的 HTML 页面
- asp.net-web-api - 修改 Swagger 生成的 Web API 操作名称
- python - curl 作为 Zapier Webhook 到 Stripe
- javascript - Javascript 上传 CSV,检测特定关键字,如果检测到则捕获用户 ID
- c++ - 如何从 Microsoft Visual Studio 2017 中的文本框中删除光束?
- google-apps-script - 继承的 Apps 脚本 onOpen 函数在克隆的 Google 表格上不起作用
- python - SQLite将数据从第一个表复制到第二个表
- ios - 为什么 NSAttributedString 格式化我的整个字符串?
- python-3.x - WxForms 日期时间到 Python 日期时间
- java - Ant 构建失败 - build.xml