Laravel - laravel-websockets 开发详解

1.我laravel-websockets 的开发环境

  • Laravel 9.0
  • Laravel WebSockets (最新版)
  • Laravel Vite

2. 安装服务器端包 beyondcode/laravel-websockets

  • 运行以下命令安装laravel-websockets
composer require beyondcode/laravel-websockets
  • 安装完后,发布 Laravel WebSockets 的配置文件
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="config"
  •  发布迁移文件
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
  • 运行迁移以创建数据库表 
php artisan migrate

 若安装失败,试试更新所有第三方库:composer update

 3.安装pusher

composer require pusher/pusher-php-server

 4.配置 .env 文件,根据你自身情况填写。

PUSHER_APP_ID=your_app_id
PUSHER_APP_KEY=your_app_key
PUSHER_APP_SECRET=your_app_secret
PUSHER_HOST=127.0.0.1
PUSHER_PORT=6001
PUSHER_SCHEME=http
PUSHER_APP_CLUSTER=mt1

 此外,还需将 .env 文件中 ,BROADCAST_DRIVER 的值改为 pusher

BROADCAST_DRIVER=pusher

 5.开始创建通知事件,运行以下命令

php artisan make:event SimpleNoticeMessage

 具体代码如下:

<?phpnamespace App\Events;use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;class SimpleNoticeMessage implements ShouldBroadcast
{use Dispatchable, InteractsWithSockets, SerializesModels;public $message;/*** Create a new event instance.** @return void*/public function __construct($message){$this->message = $message;}/*** 获取事件应广播的频道.* 频道应该是 Channel、PrivateChannel 或 PresenceChannel 的实例。 Channel 的实例代表任何用户都可以订阅的公共频道,而 PrivateChannels 和 PresenceChannels 代表需要 频道授权 的私人频道:* 我的理解就是需要发送给谁** @return \Illuminate\Broadcasting\Channel|array*/public function broadcastOn(){return new Channel('test');}/*** 事件的广播名称。(事件名称)* 可选* 如果没定义事件名称,则在客户端监听事件的时候填写的是 类名,即SimpleNoticeMessage* 如果定义了 则未 .server.admin.notice,注意最前面有个 .* @return string*/public function broadcastAs(){return 'server.test.notice';}
}

6.客户端安装 laravel-echo

npm install --save-dev laravel-echo pusher-js
  • 配置 resources\js\bootstrap.js 文件,在创建laravel 文件时有,取消注释就行,代码如下
import Echo from 'laravel-echo';import Pusher from 'pusher-js';
window.Pusher = Pusher;window.Echo = new Echo({broadcaster: 'pusher',key: import.meta.env.VITE_PUSHER_APP_KEY,cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER ?? 'mt1',wsHost: import.meta.env.VITE_PUSHER_HOST ? import.meta.env.VITE_PUSHER_HOST : `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`,wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80,wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443,forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https',enabledTransports: ['ws', 'wss'],
});
  •  页面脚本配置,在 resources\views\index.blade.php  文件 的 head 标签的结尾添加以下代码
@vite('resources/js/app.js')
<script>window.onload = function(){Echo.channel('test').listen('.server.test.notice', (e) => {console.log(e.message);});}</script>

 7.发送消息,新建控制器 testCl

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Events\SimpleNoticeMessage;class testCl extends Controller{public function sendMsg(Request $request){SimpleNoticeMessage::dispatch("hello world");return "发送成功";}
}

 8.启动项目,为以下命令各开一个终端运行

  • php artisan serve   启动laravel 项目
  • npm run dev 启动vite
  • php artisan queue:work 启动队列
  • php artisan websockets:serve 启动websockets 服务器

 9.结束。

  • 在页面访问 testCl 控制器空的sendMsg 方法,即可。
  • 内部测试,新建一个终端窗口。运行 php artisan tinker ,在窗口中 输入 event (new \App\Events\SimpleNoticeMessage('hello world')) ,回车有,即可在前端控制中打印出 hellow world
  • 调试面板,运行: 127.0.0.1:8000/laravel-websockets ,也可查看出的消息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/42992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux命令入门】查找文件

文章目录 前言whichlocatewhereisfindgrep总结前言 在日常的Linux使用中,我们经常需要查找文件,无论是为了找到某个特定的配置文件,还是为了找到某个丢失的文档。Linux提供了一些强大的命令行工具,可以帮助我们在系统中查找文件。这些工具包括find,locate,which,wherei…

「树莓派入门」树莓派进阶02-传感器应用与交通灯项目

传感器是树莓派实现智能化的关键。通过本教程,你可以开始尝试使用传感器来增强树莓派的功能。 一、传感器在树莓派中的作用 传感器是树莓派与外界环境交互的重要工具。它们可以检测各种物理量,如光、声音、温度等,并将这些物理量转换为电信号,供树莓派读取和处理。 二、数…

C++ Linux调试(无IDE)

跨平台IDE编译调试C很方便&#xff0c;如QTCreate 、VSCode、Eclipse等&#xff0c;但是如果只能使用Shell控制台呢&#xff0c;gdb调试的优势就很明显了&#xff0c;在没有IDE的情况下&#xff0c;这个方式最有效。因为上手不是很难&#xff0c;特此整理 参考链接 目录 1、G…

光伏项目开发合作模式

光伏项目开发合作模式多种多样&#xff0c;根据应用场景的不同&#xff0c;主要分为户用光伏项目合作模式和工商业光伏项目合作模式。本文将分别介绍这两种模式的特点和常见形式&#xff0c;帮助大家更好地了解光伏项目开发的市场运作。 一、户用光伏项目合作模式 1.用户全款购…

笔记本电脑内存不够

笔记本电脑内存不够是众多笔记本用户面临的常见问题&#xff0c;尤其是对于一些需要处理大型文件或者运行复杂软件的用户&#xff0c;这个问题可能会严重影响笔记本的使用体验。那么&#xff0c;我们应该如何解决笔记本电脑内存不够的问题呢&#xff1f;本文将从几个方面进行详…

2024年6月118篇代码大模型论文最全整理

引言 本文整理了2024年6月全球各大高校与科研机构发布的118篇代码大模型相关论文。根据论文内容&#xff0c;我们将其整理为基座模型与训练数据、代码微调、测试基准、代码Agent、低资源语言处理、AI代码安全与分析、人机交互、软件工程下游任务应用&#xff08;包括代码生成、…

基于B/S架构+java语言+ 开发工具Idea,vscode医院产科信息管理系统源码 如何标准化对接技术及各个模块

基于B/S架构java语言 开发工具Idea,vscode医院产科信息管理系统源码 如何标准化对接技术及各个模块 医院产科信息管理系统&#xff1a;标准化对接是一个涉及多个方面的复杂过程&#xff0c;旨在通过数字化手段提升产科管理的效率与质量&#xff0c;实现孕产妇全周期的健康管理…

获取JWT的token生成时间和过期时间

我用的依赖包如下 <dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.2.0</version></dependency>token生成时间 Date issuedAt jwt.getIssuedAt(); // 将Date转换为Instant Instant c…

【9-2:代码规范】

算法级思想 代码规范&#xff08;java&#xff09; 代码规范&#xff08;java&#xff09; 方法参数必须一致&#xff0c;不要出现自动装箱拆箱操作SimpleDateFormat是线程不安全的使用equals注意空指针异常日志 事务场景中如果出现异常被捕时注意回滚不要再finally中使用retu…

字节码编程javassist之增加异常捕获

写在前面 本文看下如何增加try catch异常捕获。 1&#xff1a;程序 需要增强的类&#xff1a; public class ApiTest1 {public Integer strToInt(String str01, String str02) {return Integer.parseInt(str01);}}插桩类 package com.dahuyou.javassist.huohuo.aa;import …

音频demo:使用faad2将AAC数据解码出PCM数据

1、README 前言 本demo是使用的开源项目faad2将aac数据解码成pcm数据。 a. 编译使用 faad2的编译&#xff1a;(faad2下载地址&#xff1a;https://sourceforge.net/projects/faac/files/faad2-src/faad2-2.8.0/) tar xzf faad2-2.8.8.tar.gz cd faad2-2.8.8/ ./configure …

【数据结构】单链表:数据结构中的舞者,穿梭于理论与实践的舞池

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 数据结构与算法 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 一、链表的概念和结构 1.1 链表的概念 在上一篇文章中&#xff0c;我们了解了线性表(linear list)&#xff0c;并且学习了其…

Spring——IOC创建对象方式

可参考官网&#xff1a;https://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.htmlhttps://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.html 1. 使用无参构造创建对象&#xff0…

数据库性能优化系统设计

设计一个数据库性能优化系统&#xff0c;目标是监测、诊断并改善数据库的运行效率&#xff0c;确保系统能够高效稳定地处理大量数据请求。以下是一个概要设计&#xff0c;包括关键模块、功能和实现思路&#xff1a; 1. 系统架构 分布式监控中心&#xff1a;采用分布式架构收集…

C++ STL 协程(Coroutines)

一:什么是协程(Coroutines): 协程是轻量级线程,可以暂停和恢复执行,协程拥有自己的暂停点状态,协程暂停时,将当前状态保存起来,在恢复执行时会恢复之前保存的状态。 二:例子: #include <coroutine> #include <iostream>void doTheWork() {std::cout <…

PHP宝藏神器多功能投票系统源码小程序

&#x1f389;发现宝藏神器&#xff01;一键解锁“多功能投票小程序”的无限可能✨ &#x1f308; 开篇安利&#xff1a;告别繁琐&#xff0c;拥抱高效&#xff01; Hey小伙伴们&#xff0c;是不是经常为组织活动、收集意见而头疼不已&#xff1f;&#x1f92f; 今天就要给大…

【理解STL】

目录 一、STL的概念1、STL的定义2、STL的组成 二、容器1、容器的定义及作用2、string类&#xff08;非容器&#xff09;3、vector容器4、set容器5、queue容器6、priority_queue容器7、stack容器8、deque容器9、map容器10、pair容器11、bitset容器12、map和set的区别13、vector和…

Node 中基于 Koa 框架的 Web 服务搭建实战

前言 在《Node之Web服务 - 掘金 (juejin.cn)》一文中,我们使用 HTTP 模块构建了后端接口,从而实现了后端服务的开发。可以对此进行进一步优化 http模块代码回顾 const http require("http");const server http.createServer((req, res) > {if (reqUrl.pathna…

Python前沿技术:机器学习与人工智能

Python前沿技术&#xff1a;机器学习与人工智能 一、引言 随着科技的飞速发展&#xff0c;机器学习和人工智能&#xff08;AI&#xff09;已经成为了计算机科学领域的热门话题。Python作为一门易学易用且功能强大的编程语言&#xff0c;已经成为了这两个领域的首选语言之一。本…

【零基础】学JS

喝下这碗鸡汤 “知识就是力量。” - 弗朗西斯培根 1.三元运算符 目标:能利用三元运算符执行满足条件的语句 使用场景:其实是比if双分支更简单的写法&#xff0c;可以使用三元表达式 语法&#xff1a;条件 ? 满足条件的执行代码 : 不满足条件执行的代码 接下来用一个小案例来展…