首页 » SEO优化 » php推送swoole技巧_用laravelSwoole实现websocket主动消息推送

php推送swoole技巧_用laravelSwoole实现websocket主动消息推送

访客 2024-12-14 0

扫一扫用手机浏览

文章目录 [+]

主动推送实现

平常我们采取 swoole 来写 WebSocket 做事可能最多的用到的是open,message,close这三个监听状态,但是切切没有看下下面的onRequest回调的利用,没错,办理这次主动推送的便是须要用onRequest回调。

php推送swoole技巧_用laravelSwoole实现websocket主动消息推送

官方文档:正由于swoole_websocket_server继续自swoole_http_server,以是在 websocket 中有onRequest回调。

php推送swoole技巧_用laravelSwoole实现websocket主动消息推送
(图片来自网络侵删)

详细实现:

# 这里是一个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();

}

}

前面说的是 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 回调特殊适用于须要在掌握器中调用的推送,比如模板之类,在掌握器中调用。

标签:

相关文章