Laravel使用swoole实现websocket主动消息推送的方法介绍
需求
需要实现一个可以主动触发消息推送的功能,这个可以实现向模板消息那个,给予所有成员发送自定义消息,而不需要通过客户端发送消息,服务端上message中监听传送的消息进行做相对于的业务逻辑。
主动消息推送实现
平常我们采用swoole来写WebSocket服务可能最多的用到的是open,message,close这三个监听状态,但是万万没有看下下面的onRequest回调的使用,没错,解决这次主动消息推送的就是需要用onRequest回调。
官方文档:正因为swoole_websocket_server继承自swoole_http_server,所以在websocket中有onRequest回调。
详细实现:
#这里是一个laravel中Commands
#运行phpartisanswoolestart即可运行
argument('action');
switch($arg){
case'start':
$this->info('swooleserverstarted');
$this->start();
break;
case'stop':
$this->info('swooleserverstoped');
break;
case'restart':
$this->info('swooleserverrestarted');
break;
}
}
/**
*启动Swoole
*/
privatefunctionstart()
{
$this->ws=newswoole_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("clientisSendMessage\n");
});
//监听WebSocket主动推送消息事件
$this->ws->on('request',function($request,$response){
$scene=$request->post['scene'];//获取值
$this->info("clientisPushMessage\n".$scene);
});
//监听WebSocket连接关闭事件
$this->ws->on('close',function($ws,$fd){
$this->info("clientisclose\n");
});
$this->ws->start();
}
}
前面说的是swoole中onRequest的实现,下面实现下在控制器中主动触发onRequest回调。实现方法就是我们熟悉的curl请求。
#调用activepush方法以后,会在cmd中打印出
#clientisPushMessage主动推送消息字眼
/**
*CURL请求
*@param$data
*/
publicfunctioncurl($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);
}
/**
*主动触发
*/
publicfunctionactivepush()
{
$param['scene']='主动推送消息';
$this->curl($param);//主动推送消息
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。