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.
Aktive Message-Push-Implementierung
Normalerweise verwenden wirswoole , 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 = 'swoole {action}'; /** * The console command description. * * @var string */ protected $description = 'Active Push Message'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @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(); } }
# 调用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-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.
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!