用laravel+Swoole实现websocket主动消息推送-php教程

资源魔 49 0
迩来有个需要:想完成一个能够自动触发音讯推送的性能,这个能够完成向模板音讯阿谁,给予一切成员发送自界说音讯,而没有需求经过客户端发送音讯,效劳端上message中监听传送的音讯进行做绝对于的营业逻辑。

自动音讯推送完成

平时咱们采纳 swoole 来写 WebSocket 效劳可能最多的用到的是open,message,close这三个监听状态,然而千万不看下上面的onRequest回调的应用,没错,处理此次自动音讯推送的就是需求用onRequest回调。

民间文档:正由于swoole_websocket_server承继自swoole_http_server,以是正在 websocket 中有onRequest回调。

具体完成:

# 这里是一个laravel中Co妹妹ands
# 运转php artisan swoole start 便可运转
<?php

namespace App\Console\Co妹妹ands;

use Illuminate\Console\Co妹妹and;
use swoole_websocket_server;

class Swoole extends Co妹妹and
{
    public $ws;
    /**
     * The name and signature of the console co妹妹and.
     *
     * @var string
     */
    protected $signature = 'swoole {action}';

    /**
     * The console co妹妹and description.
     *
     * @var string
     */
    protected $description = 'Active Push Message';

    /**
     * Create a new co妹妹and instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console co妹妹and.
     *
     * @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 回调特地实用于需求正在管制器中挪用的推送音讯,比方模板音讯之类,正在管制器中挪用。

更多PHP相干常识,请拜访PHP中文网!

以上就是用laravel+Swoole完成websocket自动音讯推送的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 WebSocket 消息推送

抱歉,评论功能暂时关闭!