ps:准备条件
lnmp/lamp环境已搭建完成并且能正常访问
swoole扩展已安装成功
创建好一个laravel的项目
1、创建swoole.php文件
#在app/Console/Commands增加一个Swoole.php的文件
php artisan make:command Swoole
2、在Kernel.php里增加命令列表
Commands\Swoole::Class
3、编辑swoole文件
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
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 = 'swoole';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$action = $this->argument('action');
switch ($action) {
case 'restart':
$this->info('swoole server restarted');
break;
case 'close':
$this->info('swoole server stoped');
break;
default:
$this->start();
break;
}
}
public function start()
{
//创建websocket服务器对象,监听0.0.0.0:9501端口
$this->ws = new \swoole_websocket_server("0.0.0.0", 9501);
//开启ssl模式
// $this->ws = new \swoole_websocket_server("0.0.0.0", 9501,SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
//配置ssl模式
// $this->ws->set([
// 'ssl_key_file' => '/var/www/html/ssl/4033464_cxh520.top.key',
// 'ssl_cert_file' => '/var/www/html/ssl/4033464_cxh520.top.pem'
// ]);
//监听WebSocket连接打开事件
$this->ws->on('open',[$this,'open']);
//监听WebSocket消息事件
$this->ws->on('message',[$this,'message']);
//监听WebSocket主动推送消息事件
$this->ws->on('request',[$this,'request']);
//监听WebSocket连接关闭事件
$this->ws->on('close',[$this,'close']);
$this->ws->start();
}
/**
* 建立连接
* @param $ws
* @param $request
*/
public function open($ws, $request){
var_dump($request->fd . "连接成功");
}
/**
* 接收消息
* @param $ws
* @param $frame
*/
public function message($ws,$frame){
var_dump('发送成功');
}
/**
* 接收请求
* @param $request
* @param $response
*/
public function request($request,$response){
}
/**
* 关闭连接
* @param $ws
* @param $fd
*/
public function close($ws,$fd){
}
}
4、前端代码
const ws = new WebSocket('ws://服务器ip:9501');
ws.onopen = () =>{
console.log("连接成功");
ws.send('111');
}
ws.onmessage = ({data}) =>{
}
ws.onclose = () =>{
}
5、主动推送代码(放在任何控制器位置调用即可)
public function swooleCurl($data)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://服务器ip:9501");
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);
}
6、服务器项目根目录运行swoole,下面两条命令都可以
#启动
php artisan swoole start
#启动并守护
php artisan swoole &
ps:基本逻辑就这样了,后面的具体逻辑就要看每个人业务需求了,好了,到此结束!