实现一个可以主动触发消息推送的功能,这个可以实现向模板消息那个,给予所有成员发送自定义消息,而不需要通过客户端发送消息,服务端上message中监听传送的消息进行做相对于的业务逻辑。

主动消息推送实现

平常我们采用 swoole 来写 WebSocket 服务可能最多的用到的是open,message,close这三个监听状态,但是万万没有看下下面的onRequest回调的使用,没错,解决这次主动消息推送的就是需要用onRequest回调。

官方文档:正因为swoole_websocket_server继承自swoole_http_server,所以在 websocket 中有onRequest回调。

详细实现:

# 这里是一个laravel中Commands

# 运行php artisan swoole start 即可运行

namespace App\Console\Commands;

use Illuminate\Console\Command;

use swoole_websocket_server;

class Swoole extends Command

{

public $ws;

/**

* The name and signature of the console command.

*

* @var string

*/

protected $signature = 'swoole {action}';

/**

* The console command description.

*

* @var string

*/

protected $description = 'Active Push Message';

/**

* Create a new command instance.

*

* @return void

*/

public function __construct()

{

parent::__construct();

}

/**

* Execute the console command.

*

* @return mixed

*/

public function handle()

{

$arg = $this->argument('action');

switch ($arg) {

case 'start':

$this->info('swoole server started');

$this->start();

break;

case 'stop':

$this->info('swoole server stoped');

break;

case 'restart':

$this->info('swoole server restarted');

break;

}

}

/**

* 启动Swoole

*/

private function start()

{

$this->ws = new swoole_websocket_server("0.0.0.0", 9502);

//监听WebSocket连接打开事件

$this->ws->on('open', function ($ws, $request) {

});

//监听WebSocket消息事件

$this->ws->on('message', function ($ws, $frame) {

$this->info("client is SendMessage\n");

});

//监听WebSocket主动推送消息事件

$this->ws->on('request', function ($request, $response) {

$scene = $request->post['scene']; // 获取值

$this->info("client is PushMessage\n".$scene);

});

//监听WebSocket连接关闭事件

$this->ws->on('close', function ($ws, $fd) {

$this->info("client is close\n");

});

$this->ws->start();

}

}

前面说的是 swoole 中onRequest的实现,下面实现下在控制器中主动触发onRequest回调。实现方法就是我们熟悉的curl请求。

# 调用activepush方法以后,会在cmd中打印出

# client is PushMessage 主动推送消息 字眼

/**

* CURL请求

* @param $data

*/

public function curl($data)

{

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, "http://127.0.0.1:9502");

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_HEADER, 1);

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

curl_exec($curl);

curl_close($curl);

}

/**

* 主动触发

*/

public function activepush()

{

$param['scene'] = '主动推送消息';

$this->curl($param); // 主动推送消息

用途

onRequest 回调特别适用于需要在控制器中调用的推送消息,比如模板消息之类,在控制器中调用。

大部分phper在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要请戳这里

swoole服务器主动推消息,实现websocket-主动消息推送laravelswoole相关推荐

  1. flux服务器推消息,服务端主动推送数据,除了 WebSocket 你还能想到啥?

    原标题:服务端主动推送数据,除了 WebSocket 你还能想到啥? 来自公众号: 江南一点雨 在 上篇文章 中,松哥和大家分享了 WebFlux 的基本用法,小伙伴们已经了解到使用 WebFlux ...

  2. springboot定时发送短信_springboot 整合websocket实现消息推送(主动推送,具体用户推送,群发,定时推送)...

    websocket springboot 整合websocket实现消息推送(主动推送,具体用户推送,群发,定时推送) 使用WebSocket构建交互式Web应用程序 本指南将引导您完成创建" ...

  3. spring boot 集成 websocket 实现消息主动推送

    前言 http协议是无状态协议,每次请求都不知道前面发生了什么,而且只可以由浏览器端请求服务器端,而不能由服务器去主动通知浏览器端,是单向的,在很多场景就不适合,比如实时的推送,消息通知或者股票等信息 ...

  4. socket接收的消息怎么更新到页面_spring boot 集成 websocket 实现消息主动

    前言 http协议是无状态协议,每次请求都不知道前面发生了什么,而且只可以由浏览器端请求服务器端,而不能由服务器去主动通知浏览器端,是单向的,在很多场景就不适合,比如实时的推送,消息通知或者股票等信息 ...

  5. 服务器向客户端推送消息之——WebSocket详细使用

    文章目录 1. 引言 2. WebSocket使用步骤 2.1 引入依赖 2.2 创建WebSocket配置类 2.3 WebSocket服务类 2.4 前端页面 1. 引言 最近遇到一个生活场景,需 ...

  6. java spring 服务器关闭连接_java springboot websocket 服务 服务器主动关闭连接 导致 抛出java.io.EOFException异常...

    遇到这个问题不要慌,去查查众说纷纭.那我就在这里总结一下吧 存在此问题的有以下几种情况 1.ws连接不稳定经常断线: 答: 1)可能是客户和服务器之间的网络问题 2)可能是服务端内存不够用导致线程被异 ...

  7. 使用微信小程序新的订阅消息接口,主动推送。

    小程序订阅消息,昨天刚上线,今天就体验了一下,遇到不少问题,不过还好都解决了. 首先:你需要在小程序后台,选择一个模板,和公众号差不多,不过这里一定要注意,选择模板和你的类目有关系,只出现你类目相关的 ...

  8. ios个推透传消息json接收不到_消息通讯——Websocket

    说起即时通讯大家应该都听过,像各种聊天软件用到的即时通讯技术是最多的.另外开发过程中实现消息推送最传统的做法就是轮询,即按照特定时间间隔由浏览器对服务器发送请求,以获取最新消息,这种传统模式带来很明显 ...

  9. html站内消息列表,WebSocket实现站内消息实时推送

    关于WebSocket WebSocket是HTML5 开始提供的一种在单个TCP连接上进行全双工通讯的协议.什么是全双工?就是在同一时间可以发送和接收消息,实现双向通信,比如打电话.WebSocke ...

最新文章

  1. android游戏课程设计,Miuka「游戏化课程设计」图卡18|好课程如何讲故事的
  2. numpy使用MKL库提升计算性能
  3. springboot公共模块打包_解决SpringBoot多模块发布时99%的问题?
  4. adb 查看屏幕大小_蚂蚁森林自动收取能量、偷取能量、浇水(使用adb、python)...
  5. 滴滴宣布架构大调整,强调安全第一
  6. 180908每日一句
  7. 如何连接linux服务器
  8. 高校后勤管理系统Java项目-基于SSM
  9. CISP考试的全过程
  10. 计算机桌面文件删除不掉是怎么了,桌面上文件删不掉_桌面上的压缩文件为什么删除不了?...
  11. HSC-1th 2022 Writeup
  12. 解决Minimum supported Gradle version is 4.6. Current version is 2.4.0
  13. androidstudio 引入百度或者高德地图 鉴权失败
  14. Flink(五):watermark简介
  15. VS2012源代码管理没有AnkhSVN
  16. 在Caffe的训练过程中打印验证集的预测结果
  17. 个人网站实现收款的几种方式
  18. 阿里云短信服务与微信小程序对接进行注册
  19. 什么是陀螺仪的dr算法_陀螺仪与加速传感器数据的融合算法解析
  20. php日志,monolog - PHP 日志神器

热门文章

  1. jQuery 树插件ZTree使用Demo
  2. Windows Phone Local Database Schema Upgrade Part1 - Adding new columns
  3. IntelliJ IDEA 2018安装+激活+汉化(详细图解)
  4. Java包的命名规则
  5. 如何防止app接口被别人调用
  6. jQuery进行DOM操作记录
  7. wx.getBLEDeviceCharacteristics 微信小程序蓝牙 微信小程序热敏打印机
  8. 对java android 中几种单例模式写法的总结
  9. Mr.J--Java之static关键字
  10. Vue 实现左边导航栏且右边显示具体内容(element-ui)