websocket 后台新订单通知 —— Laravel 5.8 workman PHPSocket.IO教程

环境要求:

  • Laravel 框架 (5.8 版本)
  • Redis 服务

1.安装 laravel-echo-server

首先我们需要全局安装 laravel-echo-server ,终端输入下面的命令

npm install -g laravel-echo-server

安装完成后,打开你的 Laravel 应用,或新启一个测试项目

 composer create-project --prefer-dist laravel/laravel echo-test

安装 Predis :

composer require predis/predis

初始化 Socket 服务:

如果你是linux,命令会找不到,推荐你看下这篇帖子

linux下npm安装的全局命令无法执行

laravel-echo-server init

执行这条命令后,会询问你一些关于 Socket 服务的配置信息

// 是否在开发模式下运行此服务器(y/n) 输入y
? Do you want to run this server in development mode? (y/N) // 设置服务器的端口 默认 6001 输入 6001就可以了 或者你想要的
? Which port would you like to serve from? (6001) // 想用的数据库 选择 redis
? Which database would you like to use to store presence channel members? (Use arrow keys)
❯ redis
sqlite // 这里输入 你的laravel 项目的访问域名
? Enter the host of your Laravel authentication server. (http://localhost) // 选择 网络协议 http
? Will you be serving on http or https? (Use arrow keys)
❯ http
https // 您想为HTTP API生成客户端ID/密钥吗 N
? Do you want to generate a client ID/Key for HTTP API? (y/N) // 要设置对API的跨域访问吗?(y/n)N
Configuration file saved. Run laravel-echo-server start to run server.

启动服务

laravel-echo-server start  启动

laravel-echo-server stop  停止

如果出现报错,先去启动你的redis 确认启动无误后开始配置 .env

BROADCAST_DRIVER=redis

QUEUE_CONNECTION=redis

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

2.安装 Socket.io 客户端和 Laravel-Echo

在这之前建议运行一下 npm install

npm install --save socket.io-client
npm install --save laravel-echo

现在我们先准备客户端的事情 resources/js/app.js 修改app.js,如果不是5.8自行找对应目录文件

import Echo from 'laravel-echo'

window.io = require('socket.io-client');
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'
});

终端运行

npm run dev

引入到页面,我就是先拿首页来测试了resources/views/welcome.blade.php

// 头部加入
<meta name="csrf-token" content="{{ csrf_token() }}"> // 引入app.js
<script src="js/app.js"></script> // 监听并输出
<script> // ’user1'是频道,‘ExampleEvent’ 是监听的事件(这是事件的类名,你也可以根据你的需要自定义)
window.Echo.channel('user1')
.listen('ExampleEvent', (e) => {
console.log(e);
});
</script>

3.开始准备事件,在对应的频道上进行广播

创建一个ExampleEvent事件

php artisan make:event ExampleEvent

这时在 App/Events 目录下面会创建一个叫做 ExampleEvent.php 的事件类

事件类继承于 ShouldBroadcast 接口

class ExampleEvent implements ShouldBroadcast

找到  broadcastOn  函数,在对应的频道上进行广播

    // user1就是频道
public function broadcastOn()
{
return new Channel('user1');
//return new PrivateChannel('channel-name');
} // 触发事件时返回的数据
public function broadcastWith()
{
return [
'data' => 'success!'
];
}

现在添加一条路由用来测试,这里也可以通过控制器去发送,相关看事件文档

Route::get('user1', function(){
broadcast(new \App\Events\ExampleEvent);
});

现在启动监听事件

php artisan queue:listen --tries=1

现在我们可以开始测试,先打开首页,如果你定义了其他路由自行打开,我就默认的欢迎页面

如果看到下面页面  恭喜你已经和服务器连接上了

客户端运行时的状态

服务端运行时的状态

现在我们打开事件路由广播一条消息,打开另一个页面访问  /user1,如果你设定了控制器访问对应的路由就是了,访问以后是空白不必紧张,我们先在终端看看队列,如果什么都没有输出,自行检查redis相关配置,以及查看redis库内是否有数据。正确会看到下面图,刷新一次页面会出现一条

如果正常就可以略过这一步了,基本都是5.8版本的问题,其他也没测试,我们先看看服务端显示什么

频道自动加了前缀

找到config/database.php配置文件

'options' => [
'cluster' => env('REDIS_CLUSTER', 'predis'),
// 删掉这一行或是注释掉
'prefix' => Str::slug(env('APP_NAME', 'laravel'), '_').'_database_',
],

然后我们再次重新启动服务和队列,刷新两个页面

就可以正常接收消息了

为什么会自动发送  2,3,因为这是 Engine .io协议

数据包编码 命令   含义
0 open 在打开新传输时从服务器发送(重新检查)
1 close 请求关闭此传输,但不关闭连接本身。
2 ping 由客户端发送。服务器应该用包含相同数据的乓包应答

示例1.客户端发送:2probe 2.服务器发送:3probe
3 pong 由服务器发送以响应ping数据包
4 message 实际消息,客户端和服务器应该使用数据调用它们的回调。

实施例1

服务器发送:4HelloWorld客户端接收并调用回调socket.on('message',function(data){console.log(data);});

实施例2

客户端发送:4HelloWorld服务器接收并调用回调socket.on('message',function(data){console.log(data);})
5 upgrade 在engine.io切换传输之前,它测试,如果服务器和客户端可以通过这个传输进行通信。如果此测试成功,客户端发送升级数据包,请求服务器刷新其在旧传输上的缓存并切换到新传输。
6 noop noop数据包。主要用于在接收到传入WebSocket连接时强制轮询周期。

websocket 后台新订单通知 —— Laravel 5.8 Laravel-echo-server教程的更多相关文章

  1. 5.Fanout交换机之新订单通知商户场景

    标题 : 5.Fanout交换机之新订单通知商户场景 目录 : RabbitMQ 序号 : 5 const string newOrderQueueName = "neworder-queu ...

  2. PHP使用AJax轮询实现新订单实时提醒

    业务逻辑:Ajax每隔10秒钟请求一次接口,该接口会去查询数据库是否有新的订单,如果有则返回新订单的数量,后台收到声音提示,更改后台提醒数量 提醒框可链接到订单列表,后台更改完订单状态后会提醒会消失 ...

  3. Zencart先生成订单后付款,类似淘宝后台修改订单价格

    Zencart 使用 Paypal 付款,会出现漏单的情况,即 paypal 已经收到客户的付款,但是网站后台没有客户的订单.导致 paypal 漏单的原因大致会是当客户跳转到Paypal 网站付款完 ...

  4. websocket后台数据推送

    Websocket定义: 说明: 作为下一代的 Web 标准,HTML5 拥有许多引人注目的新特性,如 Canvas.本地存储.多媒体编程接口.WebSocket 等等.这其中有“Web 的 TCP ...

  5. ECshop后台新功能权限添加

    ecshop后台新功能权限的添加 1.在后台“推荐管理”里添加“推荐人分成”.“会员分成”两个操作功能以及权限 index.php?act=menu incluedes/inc_priv.php:权限 ...

  6. iOS 10 的一个重要更新-新的通知推送 API

    iOS 10 最重要的变化可能就是通知 API 的重构了.本文用一个简单闹钟的例子介绍了 User Notification 的 API 变化和新功能. 简介 很久以前,开发者就可以在 iOS 里预约 ...

  7. 在ECSHOP后台的订单列表中显示配送方式

    熟悉ECSHOP后台的人都知道,只有点击某个具体的订单,进入订单详细页面才能看到该订单的配送方式,最模板修改的目的,是想让管理者在订单列表页面 就能看到该订单的配送方式. 下面是修改方法:首先来修改 ...

  8. Laravel 从入门到精通系列教程

    转载;https://laravelacademy.org/laravel-tutorial-5_7 适用于 Laravel 5.5.5.6.5.7 版本,本系列教程将围绕一个 LTS 版本,然后采取 ...

  9. Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解

    1.简介 本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍吧. Laravel Excel 在 ...

  10. Laravel 调试利器 —— Laravel Debugbar 扩展包安装及使用教程

    1.简介 Laravel Debugbar 在 Laravel 5 中集成了 PHP Debug Bar ,用于显示调试及错误信息以方便开发.该扩展包包含了一个 ServiceProvider 用于注 ...

随机推荐

  1. [转]解决Spring Data Jpa 实体类自动创建数据库表失败问题

    先说一下我遇到的这个问题,首先我是通过maven创建了一个spring boot的工程,引入了Spring data jpa,结果实体类创建好之后,运行工程却没有在数据库中自动创建数据表. 找了半天发 ...

  2. 即时通讯技术文集(第29期):IM开发技术合集(Part2) [共18篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第29 期. [- 1 -] 谈谈移动端 IM 开发中登录请求的优化 [链接] http://w ...

  3. 即时通讯技术文集(第28期):IM开发技术合集(Part1) [共18篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第28 期. [- 1 -] 新手入门一篇就够:从零开发移动端IM [链接] http://ww ...

  4. 让我看看有多少人不知道Vue3中也能实现高阶组件HOC

    前言 高阶组件HOC在React社区是非常常见的概念,但是在Vue社区中却是很少人使用.主要原因有两个:1.Vue中一般都是使用SFC,实现HOC比较困难.2.HOC能够实现的东西,在Vue2时代mi ...

  5. 编译树莓派Linux内核

    1.建议边看视频边跟着教程走 https://www.bilibili.com/video/av91990721?zw 2.准备工作 下载官方提供的交叉编译工具链 git clone https:// ...

  6. 如何快速在本地运行你vue打包的的dist文件

    要在本机启动运行前端提供的dist包,需要先安装一个HTTP服务器,例如Apache,Nginx,phpstudy.这里以使用Node.js的http-server为例进行说明 首先,确保已经安装了N ...

  7. ClickHouse-4SQL参考

    SQL参考 ClickHouse支持以下形式的查询: SELECT INSERT INTO CREATE ALTER 其他类型的查询 ClickHouse SQL 语句 语句表示可以使用 SQL 查询 ...

  8. w3cschool-Hadoop 教程

    https://www.w3cschool.cn/hadoop/ 铺垫 人产生数据的速度越来越快,机器则更加快,数据的增长速度通常比算法更快,所以需要另外的一种处理数据的方法. 硬盘的容量增加了,但性 ...

  9. colab 使用技巧

    无法进入目录 import os path = "/content/TaBERT/" os.chdir(path) print(os.getcwd()) 无法执行conda !pi ...

  10. mysql事务中使用临时表

    最近在使用存储过程完成晚上数据的定时汇总功能,其中需要在存储过程中启用事务,但是发现使用了create table语句后事务会自动提交这个语句前的语句,即便是这个语句后发生了错误进行了回滚. 测试语句 ...