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);//主动推送消息
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。