thinkphp6 workerman无法使用框架Db/model等类库方法解决方案

thinkphp6 workerman无法使用框架Db/model相关操作解决

  1. 执行安装相关扩展
    composer require webman/gateway-worker
  2. 引入成功后编辑服务类文件,直接展示代码
<?php

namespace app\server\controller;

use GatewayWorker\BusinessWorker;
use GatewayWorker\Gateway;
use GatewayWorker\Register;
use Workerman\Worker;

class SocketServe
{

    public function __construct()
    {
        $this->start_register();
        $this->start_gateway();
        $this->start_businessworker();
        // 运行所有服务
        Worker::runAll();
    }

    public function start_register()
    {
        // register 必须是text协议,切记不能将register端口开放给外网
        $register = new Register('text://127.0.0.1:1238');
    }

    public function start_gateway()
    {
        // gateway 进程,这里使用Text协议,可以用telnet测试
//        $gateway = new Gateway("tcp://0.0.0.0:8282");
        $gateway = new Gateway("websocket://0.0.0.0:8282");
        // 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 = 20;

        $gateway->pingNotResponseLimit = 0;

        // 心跳数据
        $gateway->pingData = '接受心跳';
    }

    public function start_businessworker()
    {
        $worker = new BusinessWorker();
        // worker名称
        $worker->name = 'YourAppBusinessWorker';
        // bussinessWorker进程数量
        $worker->count = 4;
        // 服务注册地址
        $worker->registerAddress = '127.0.0.1:1238';
        //设置处理业务的类,此处制定Events的命名空间
        $worker->eventHandler = 'app\server\controller\Even';
    }

}
  1. 业务处理代码(测试使用)
<?php

namespace app\server\controller;

use GatewayWorker\Lib\Gateway;

class Even
{

    public static function onWebSocketConnect($client_id, $data)
    {
        var_export($data);
        if (!isset($data['get']['token'])) {
            Gateway::closeClient($client_id);
        }
    }

    // 当有客户端连接时,将client_id返回,让mvc框架判断当前uid并执行绑定
    public static function onConnect($client_id)
    {
        Gateway::sendToCurrentClient("Your client_id is $client_id");
    }
    // GatewayWorker建议不做任何业务逻辑,onMessage留空即可
    public static function onMessage($client_id, $message){

        $name = \think\facade\Db::table('user')->save(['name'=>$message]);
        // 群聊,转发请求给其它所有的客户端
        return GateWay::sendToAll($message);
    }
}
  1. 在根目录创建启动文件
<?php
// [ 应用入口文件 ]
namespace think;

require __DIR__ . '/../vendor/autoload.php';

//加载框架并初始化应用(这样才能直接使用框架自带的一些类库方法)
$http = (new App())->initialize()->make('app\server\controller\SocketServe');
  1. 启动服务
    php serve.php start

启动成功

服务启动成功如图所示

结束 测试一切正常

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: thinkphp6是一个PHP框架,而workerman是一个PHP的高性能网络框架。两者可以结合使用,实现高性能的网络应用程序开发。thinkphp6提供了丰富的开发功能和便捷的开发体验,而workerman则提供了高性能的网络通信能力,可以让应用程序处理更多的并发请求。结合使用,可以让开发者更加轻松地开发出高性能的网络应用程序。 ### 回答2: ThinkPHP 6 是一个轻量级的 PHP 框架,可以帮助开发人员快速地构建功能强大的 Web 应用程序。它具有优秀的性能和灵活的架构,使其成为 PHP 开发界的一颗明珠。 Workerman 是一个基于 PHP 的高性能网络框架,它能够轻松地处理海量的并发连接。Workerman 的优势在于其非阻塞的 IO 模式,这使得它可以处理数万甚至数十万的并发连接,并且速度非常快。 ThinkPHP 6 和 Workerman 都是非常优秀的 PHP 框架,它们在某些方面是可以进行完美结合的。在实际开发中,我们可以通过将 ThinkPHP 6 和 Workerman 集成在一起,来构建一个高性能、高并发的 Web 应用程序。 如果我们使用 ThinkPHP 6 和 Workerman 集成,我们可以通过 Workerman 处理大量的并发请求,并且使用 ThinkPHP 6 的 MVC 架构来管理业务逻辑。这样,我们可以使用 ThinkPHP 6 的便利性来编写复杂的业务逻辑,而不必担心网络连接的性能问题。 此外,Workerman 还提供了很多与 tcp、udp、websocket 等协议相关的支持,可以轻松地处理网络通信方面的问题。而 ThinkPHP 6 则提供了丰富的数据库操作、模板引擎和路由等功能,可以帮助我们编写复杂的 Web 应用程序。 总之,ThinkPHP 6 和 Workerman 的结合,可以帮助我们构建一个高性能、高并发的 Web 应用程序,这对于那些对性能和用户体验有较高要求的应用程序来说是一种非常不错的选择。 ### 回答3: ThinkPHP6是一个非常流行的PHP框架,许多开发者喜欢使用它来开发高质量的WEB应用程序。而Workerman是一个基于PHP的高性能网络框架,许多开发者也纷纷将其加入到自己的开发工具箱中。 为了更好地探讨ThinkPHP6和Workerman的应用,我们可以先了解它们各自的特点和优势。ThinkPHP6以其简单易用、灵活性、高效性和可扩展性而闻名,并广泛运用于电子商务、社交媒体、博客、论坛和CMS等各种WEB应用场景。其团队秉承"简单、快速、创新"的开发理念,不断推出新的功能和工具,并严格遵循PSR标准,确保代码质量和可维护性。 而Workerman则注重性能和可扩展性,运用基于事件驱动的编程模型,在实现高并发、高性能通讯方面表现出色。其主要应用场景包括实时通讯、网络游戏、实时数据推送等,其高度灵活的API设计为开发者提供了非常广泛的应用空间。Workerman还支持多进程和负载均衡等功能,可以提高系统的稳定性和可用性。 使用ThinkPHP6和Workerman结合的主要目的是在实现高性能、高并发的一些WEB应用场景时提高系统的质量,并兼顾代码的可读性和可维护性。例如,可以基于ThinkPHP6和Workerman实现在线聊天功能,支持大量用户同时在线,有良好的稳定性和响应速度。此外,也可以采用Workerman的异步IO模型和多进程特性,将处理密集型任务的工作分配到不同的子进程中,提高应用程序的并发性和性能表现。 综上所述,ThinkPHP6和Workerman是两个非常有用的工具,各自具有不同的特点和优势。将其结合使用可以在一些高质量的WEB应用程序中发挥优势,提高应用程序的质量和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值