在larave中引入GatewayWorker开发webscoket项目流程步骤
Laravel  /  管理员 发布于 1年前   367
在larave框架中整合GatewayWorker开发webscoket项目还是比较方便的;
GatewayWorker是基于 workerman 的分布式即时通讯框架可以开发物联网,即时聊天等应用。
支持 tcp websocket 等长链接协议缺点是没有数据库操作类,控制器,验证类等。
本文章是适合有 GatewayWorker 使用经验的开发者.
进入步骤:
在 laravel 框架新建一个自定义命令行
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use GatewayWorker\BusinessWorker;
use GatewayWorker\Gateway;
use GatewayWorker\Register;
use Workerman\Worker;
class WorkermanCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'workman {action} {d?}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Start a Workerman server.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
global $argv;
$action = $this->argument('action');
$argv[0] = 'wk';
$argv[1] = $action;
if($this->argument('d')){
$argv[2]="-d";
}
$this->start();
}
private function start()
{
$this->startGateWay();
$this->startBusinessWorker();
$this->startRegister();
Worker::runAll();
}
private function startBusinessWorker()
{
$worker = new BusinessWorker();
$worker->name = 'BusinessWorker';
$worker->count = 1;
$worker->registerAddress = '127.0.0.1:1238';
$worker->eventHandler = \App\Workerman\Events::class;
}
private function startGateWay()
{
$gateway = new Gateway("websocket://0.0.0.0:8585");
// gateway名称,status方便查看
$gateway->name = 'YourAppGateway';
// gateway进程数,一般设置2个就足够
$gateway->count = 2;
// 本机ip,分布式部署时使用内网ip
$gateway->lanIp = '127.0.0.1';
// 内部通讯起始端口,假如$gateway->count=2,起始端口为2900
// 则一般会使用2900 2901 2个端口作为内部通讯端口
$gateway->startPort = 2900;
// 服务注册地址
$gateway->registerAddress = '127.0.0.1:1238';
// 心跳间隔,客户端多久不发心跳就断开
$gateway->pingInterval = 60;
//是否允许客户端不发心跳
$gateway->pingNotResponseLimit = 1;
// 心跳数据
$gateway->pingData = '{"type":"ping"}';
}
private function startRegister()
{
new Register('text://0.0.0.0:1238');
}
}
在 App\Workerman 目录新建;
Events.php
<?php
namespace App\Workerman;
use App\Exceptions\BusinessExceptions;
use \GatewayWorker\Lib\Gateway;
class Events
{
public static function onWorkerStart($businessWorker)
{
}
public static function onConnect($client_id)
{
}
public static function onWebSocketConnect($client_id, $data)
{
//这里做登录,权限验证
}
public static function onMessage($client_id, $message)
{
//接收$message
// 这里可以做路由分发实例化对应的类和方法
//实例化具体的控制器和方法,返回json类型的数据
Gateway::sendToClient($client_id, json_encode($res,JSON_UNESCAPED_UNICODE));
}
public static function onClose($client_id)
{
}
}
例如 请求的内容
{
"type":"v1/my/get"
}
可以转化成调用 Logic 目录下的
v1/MyLogic.php 的 function get ()
namespace App\Http\Logic\v1;
class Mylogic{
function get(){
return ['code'=>1,"message"=>"mesages","data"=>[]]
}
}
其他的方面和 laravel 用法差不多。
不能使用 laravel 框架的 session, 可以使用 GatewayWorker 的 session
启动命令
启动 (开发模式)
php artisan workman start
启动
php artisan workman start d
停止
php artisan workman stop
重启
php artisan workman restart
同理也可以引入到 thinkphp 和 webman
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号