前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel中Websocket基本使用(Workerman)

Laravel中Websocket基本使用(Workerman)

作者头像
切图仔
发布2022-09-14 15:13:48
2.8K0
发布2022-09-14 15:13:48
举报
文章被收录于专栏:生如夏花绚烂
什么是Workerman

Workerman是一款开源高性能异步PHP socket框架。支持高并发,超高稳定性,被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mysql、异步Redis、异步Http、MQTT物联网客户端、异步消息队列等众多高性能组件。

本文介绍workerman实现socket通讯,在此之前请确定你对websocket有所了解

什么是GatewayWorker

GatewayWorker是基于Workerman开发的一套TCP长连接的应用框架, 实现了单发、群发、广播等接口,内置了mysql类库, GatewayWorker分为Gateway进程和Worker进程,天然支持分布式部署,能够支持庞大的连接数(百万甚至千万连接级别的应用)。 可用于开发IM聊天应用、移动通讯、游戏后台、物联网、智能家居后台等等。

安装 gateway-worker
代码语言:javascript
复制
composer require workerman/gateway-worker
创建命令启动 workerman服务
代码语言:javascript
复制
php artisan make:command WorkermanCommand

创建的命令存放在 app\Console\Commands 在WorkermanCommand.php键入如下代码

代码语言:javascript
复制
<?php

namespace App\Console\Commands;

use GatewayWorker\BusinessWorker;
use GatewayWorker\Gateway;
use GatewayWorker\Register;
use Illuminate\Console\Command;
use Workerman\Worker;

class WorkermanCommand extends Command
{

    protected $signature = 'workman {action} {--d}';

    protected $description = 'Start a Workerman server.';

    public function handle()
    {
        global $argv;
        $action = $this->argument('action');

        $argv[0] = 'wk';
        $argv[1] = $action;
        $argv[2] = $this->option('d') ? '-d' : '';

        $this->start();
    }

    private function start()
    {
        $this->startGateWay();
        $this->startBusinessWorker();
        $this->startRegister();
        Worker::runAll();
    }

    private function startBusinessWorker()
    {
        $worker                  = new BusinessWorker();
        //work名称
        $worker->name            = 'BusinessWorker';
        //businessWork进程数
        $worker->count           = 2;
        //服务注册地址
        $worker->registerAddress = '127.0.0.1:1236';
        //设置\App\Workerman\Events类来处理业务
        $worker->eventHandler    = \App\Workerman\Events::class;
    }

    private function startGateWay()
    {  
        //gateway进程
        $gateway = new Gateway("websocket://0.0.0.0:2346");
        //gateway名称 status方便查看
        $gateway->name                 = 'Gateway';
        //gateway进程
        $gateway->count                = 2;
        //本机ip
        $gateway->lanIp                = '127.0.0.1';
        //内部通讯起始端口,如果$gateway->count = 4 起始端口为2300
        //则一般会使用 2300,2301 2个端口作为内部通讯端口
        $gateway->startPort            = 2300;
        //心跳间隔
        $gateway->pingInterval         = 30;
        //客户端连续$pingNotResponseLimit次$pingInterval时间内不发送任何数据则断开链接,并触发onClose。
        //我们这里使用的是服务端主动发送心跳所以设置为0 
        $gateway->pingNotResponseLimit = 0;
        //心跳数据
        $gateway->pingData             = '{"type":"@heart@"}';
        //服务注册地址
        $gateway->registerAddress      = '127.0.0.1:1236';
    }

    private function startRegister()
    {
        new Register('text://0.0.0.0:1236');
    }
}

可以使用如下命令

  1. php artisan workman start :启动
  2. php artisan workman stop:停止
  3. php artisan workman restart:重启
  4. php artisan workman reload:平滑重启
  5. php artisan workman status:查看状态
创建事件监听文件来监听处理 workman 的各种事件。

创建 app/Workerman/Events.php

键入如下代码

代码语言:javascript
复制
<?php

namespace App\Workerman;
use \GatewayWorker\Lib\Gateway;
class Events
{

    // businessWorker进程启动事件
    public static function onWorkerStart($businessWorker)
    {
    }
    //连接事件
    public static function onConnect($client_id)
    {
        // 向当前client_id发送数据
        Gateway::sendToClient($client_id, "Hello $client_id");
    }
    //进程退出事件
    public static function onWebSocketConnect($client_id, $data)
    {
    }
    //消息事件
    public static function onMessage($client_id, $message)
    {
         // 向所有人发送
         Gateway::sendToAll("$client_id said $message");
    }
    // 连接断开事件
    public static function onClose($client_id)
    {
    }
}
启动workerman

运行命令

代码语言:javascript
复制
php artisan workman start --d

如下界面代表启动workerman启动成功

启动成功后,我们可以利用websocket在线测试工具测试连接

Laravel基本使用workman就介绍到这里,后面会利用workman实现简单聊天功能 移步至【配置wss】【实现聊天】

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Workerman
  • 什么是GatewayWorker
  • 安装 gateway-worker
  • 创建命令启动 workerman服务
  • 创建事件监听文件来监听处理 workman 的各种事件。
  • 启动workerman
相关产品与服务
物联网
腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档