Laravelはどのようにswooleでwebsocketアクティブメッセージプッシュを開発します

3731 ワード

需要:クライアントを通じてメッセージを送信する必要がなく、サービス側のmessageで転送されたメッセージを傍受して相対的なビジネスロジックを行う必要がなく、テンプレートメッセージにすべてのメンバーにカスタムメッセージを送信する機能を実現したい.
アクティブメッセージプッシュは、通常、WebSocketサービスを書くためにswooleを採用している場合が最も多く使われているのはopen、message、closeの3つの傍受状態ですが、次のonRequestコールバックの使用は決して見られません.間違いなく、今回のアクティブメッセージプッシュを解決するにはonRequestコールバックが必要です.公式ドキュメント:swoole_だからこそwebsocket_serverはswooleから継承されます.http_serverなので、websocketでonRequestコールバックがあります.
実装の詳細:
#      laravel Commands
#   php artisan swoole start     
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
"); }); // WebSocket $this->ws->on('request', function ($request, $response) { $scene = $request->post['scene']; // $this->info("client is PushMessage
".$scene); }); // WebSocket $this->ws->on('close', function ($ws, $fd) { $this->info("client is close
"); }); $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コールバックは、テンプレートメッセージなど、コントローラで呼び出す必要があるプッシュメッセージに特に適しています.もしかすると多くの1-5年開発のPHPプログラマーがここに来て多くの友达がボトルネックに直面して、中高級、アーキテクチャ師に進級したいと思っています!!swooleとlaravel、thinkphp 6を深く学びたいです.swoftマイクロサービスは使用中に多くの困難に直面しています.皆さんが一日も早くPHPアーキテクチャをアップグレードできるように、このPHPアーキテクチャの路線図とアーキテクチャのチュートリアルを参考にして、ここを突き刺してください.