用swoole实现websocket消息推送怎么做
Admin 2022-06-08 群英技术资讯 758 次浏览
这篇文章主要介绍了用swoole实现websocket消息推送怎么做相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇用swoole实现websocket消息推送怎么做文章都会有所收获,下面我们一起来看看吧。需求
需要实现一个可以主动触发消息推送的功能,这个可以实现向模板消息那个,给予所有成员发送自定义消息,而不需要通过客户端发送消息,服务端上message中监听传送的消息进行做相对于的业务逻辑。
主动消息推送实现
平常我们采用 swoole 来写 WebSocket 服务可能最多的用到的是open,message,close这三个监听状态,但是万万没有看下下面的onRequest回调的使用,没错,解决这次主动消息推送的就是需要用onRequest回调。
官方文档:正因为swoole_websocket_server继承自swoole_http_server,所以在 websocket 中有onRequest回调。
详细实现:
# 这里是一个laravel中Commands
# 运行php artisan swoole start 即可运行
<?php
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); // 主动推送消息
总结
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章小编给大家分享一下Python实现聚类K-means算法代码解析,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
1.php的版本:PHP7.3.0-dev(cli)(built:Mar18201800:28:55)(NTS)2.unless语法结构:unless($cond){statement;}语法作用:当$cond为假的时候,执行statement语句。3.代码修改词法分析文件:Zend/zend_langua
当开发者使用先将对象序列化,然后将对象中的字符进行过滤,最后再进行反序列化。这个时候就有可能会产生PHP反序列化字符逃逸的漏洞。
call_user_func官方的解释是:把第一个参数作为回调函数(callback),并且将其余的参数作为回调函数的参数。第一个参数可以是函数名,后面的均为作为该函数使用的参数。1.call_user_func的初步使用 看例子://1.初步使用functionsayHi($name){echo$name.'sayhi'."<br>";}
<?php//连接Memcache$mem=newMemcache;$mem->connect("localhost",11211)ordie("Couldnotconnect");//保存数据$mem->set('key1','Thisisfirstvalue',0,60);$val=$mem->get('key1');echo"Ge
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008