Heim  >  Artikel  >  Backend-Entwicklung  >  Verwendung von Laravel+Swoole zur Implementierung von WebSocket Active Message Push

Verwendung von Laravel+Swoole zur Implementierung von WebSocket Active Message Push

angryTom
angryTomnach vorne
2019-11-29 16:36:253678Durchsuche

Vor Kurzem besteht ein Bedarf: Ich möchte eine Funktion implementieren, die einen Nachrichten-Push aktiv auslösen kann. Dies kann durch Senden einer Vorlagennachricht an alle Mitglieder implementiert werden, ohne dass eine Nachricht über den Server gesendet werden muss Nachricht, hören Sie sich die übertragene Nachricht an und führen Sie die entsprechende Geschäftslogik aus.

Verwendung von Laravel+Swoole zur Implementierung von WebSocket Active Message Push

Aktive Message-Push-Implementierung

Normalerweise verwenden wir

swoole , um WebSocket zu schreiben Der Dienst verwendet möglicherweise am häufigsten die drei Überwachungszustände „Öffnen“, „Nachricht“ und „Schließen“. Achten Sie jedoch niemals auf die Verwendung des unten aufgeführten Rückrufs onRequest. Ja, dies ist erforderlich, um diesen aktiven Nachrichten-Push zu lösen. Verwenden Sie den onRequest-Rückruf.

Offizielles Dokument: Da swoole_websocket_server von swoole_http_server erbt, gibt es im Websocket einen onRequest-Rückruf.

Detaillierte Implementierung:

# 这里是一个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 = &#39;swoole {action}&#39;;

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = &#39;Active Push Message&#39;;

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

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $arg = $this->argument(&#39;action&#39;);
        switch ($arg) {
            case &#39;start&#39;:
                $this->info(&#39;swoole server started&#39;);
                $this->start();
                break;
            case &#39;stop&#39;:
                $this->info(&#39;swoole server stoped&#39;);
                break;
            case &#39;restart&#39;:
                $this->info(&#39;swoole server restarted&#39;);
                break;
        }
    }

    /**
     * 启动Swoole
     */
    private function start()
    {
        $this->ws = new swoole_websocket_server("0.0.0.0", 9502);
        //监听WebSocket连接打开事件
        $this->ws->on(&#39;open&#39;, function ($ws, $request) {
        });
        //监听WebSocket消息事件
        $this->ws->on(&#39;message&#39;, function ($ws, $frame) {
            $this->info("client is SendMessage\n");
        });
        //监听WebSocket主动推送消息事件
        $this->ws->on(&#39;request&#39;, function ($request, $response) {
            $scene = $request->post[&#39;scene&#39;];       // 获取值
            $this->info("client is PushMessage\n".$scene);
        });
        //监听WebSocket连接关闭事件
        $this->ws->on(&#39;close&#39;, function ($ws, $fd) {
            $this->info("client is close\n");
        });
        $this->ws->start();
    }
}

Was ich oben erwähnt habe, ist die Implementierung von onRequest in swoole. Die folgende Implementierung löst aktiv den onRequest-Rückruf im Controller aus. Die Implementierungsmethode ist die uns bekannte Curl-Anfrage.

# 调用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[&#39;scene&#39;] = &#39;主动推送消息&#39;;
        $this->curl($param);            // 主动推送消息

Zweck

onRequest-Rückruf eignet sich besonders für Push-Nachrichten, die im Controller aufgerufen werden müssen, z. B. Vorlagennachrichten usw., die im Controller aufgerufen werden.

Weitere PHP-bezogene Kenntnisse finden Sie auf der

PHP-Chinese-Website!

Das obige ist der detaillierte Inhalt vonVerwendung von Laravel+Swoole zur Implementierung von WebSocket Active Message Push. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen