thinkphp5整合workerman,tp5整合workerman

简介: thinkphp5整合workerman,tp5整合workerman

由于workerman底层直接读取$_SERVER['argv']的命令行参数,没有提供独立的方法start/stop,而tp的命令行参数无法适配workerman,虽然thinkphp官方专门做了一个适配的版本,但是看了下评论问题挺多的。于是自己来搞一个.

(1).在application/command.php中添加如下代码:

return [

   'app\socket\command\Socket'

];

(2).创建 application/socket/command目录,在这个目录创建Socket.php文件

<?php

namespace app\socket\command;


use think\console\Command;

use think\console\Input;

use think\console\input\Argument;

use think\console\input\Option;

use think\console\Output;

use Workerman\Worker;


class Socket extends Command

{

   /**

    * 命令Input配置

    */

   protected function configure()

   {

       $this->setName('socket')

           ->addArgument('action', Argument::OPTIONAL, "action")

           ->addOption('other', '-d', Option::VALUE_OPTIONAL, 'test');

   }


   /**

    * 重置Cli参数

    */

   protected function resetCli()

   {

       global $argv, $argc;


       $file = "{$argv['0']} {$argv['1']}";

       $action = $argv['2'];

       $extend = empty($argv['3']) ? '' : $argv['3'];

       $argv = [];

       $argv[] = $file;

       $argv[] = $action;

       if ($extend)

       {

           $argv[] = $extend;

       }

       $argc = count($argv);


       $_SERVER['argv'] = $argv;

       $_SERVER['argc'] = $argc;

   }


   /**

    * 命令响应

    * @param Input $input

    * @param Output $output

    * @return int|void|null

    */

   protected function execute(Input $input, Output $output)

   {

       //01.重置Cli命令行参数

       $this->resetCli();


       //02.开始WorkMan代码

       $ws_worker = new Worker(config('socket.socket_name'));


       // 启动4个进程对外提供服务

       $ws_worker->count = 2;


       // 接收到浏览器发送的数据时回复hello world给浏览器

       $ws_worker->onMessage = function ($connection, $data) {


           // 向浏览器发送hello world

           $connection->send('hello ' . $data);


       };


       // 运行worker

       Worker::runAll();

   }

}

(3).在tp根目录执行命令

php think socket start

名字不想叫socket,可以修改$this->setName('socket')

目录
相关文章
|
5月前
|
小程序 Shell Linux
workman(二)thinkphp5.0安装websocket插件workerman
首先说明一下我使用的PHP框架是thinkphp5.0。 当然,workerman这个插件不是只有thinkphp5.0可以使用。 具体的安装方法,thinkphp5.0的官方手册中是给出了明确的说明 请移步《thinkphp5.0官方手册》
92 0
|
5月前
|
小程序 Shell API
workman(三)thinkphp5.0使用workerman
Thinkphp5.0框架如何使用workerman,这个官方手册中同样给出了示例 请移步《thinkphp5.0官方手册》
90 0
|
5月前
|
前端开发 小程序 JavaScript
swoole(一)laravel8配置使用swoole(3)
Laravel-swoole的优势就是将swoole插件集成至laravel-s插件中,当前laravel-s插件启动的时候,同时持久化的启动了swoole,不需要我们再服务器端再启动一次swoole。
44 0
|
5月前
|
Dart 前端开发 JavaScript
swoole(一)laravel8配置使用swoole(1)
然后在服务器使用命令行执行 复制代码
122 0
|
5月前
|
前端开发 应用服务中间件 网络安全
swoole(一)laravel8配置使用swoole(2)
将上边我使用xxx代替的部分改成你自己的信息。 特别说明一下:我这里使用了ssl证书,如果您没有相关的配置,把https那部分换掉就好。 具体的配置含义,请参考官方文档:
57 0
|
PHP
PHP swoole 监听端口进程
PHP swoole 监听端口进程
74 0
|
PHP
PHP实现Workerman实例 高性能PHP Socket即时通讯框架
PHP实现Workerman实例 高性能PHP Socket即时通讯框架
365 0
|
NoSQL PHP Redis
PHP使用predis/predis包应用实例
PHP使用predis/predis包应用实例
201 0
|
设计模式 开发框架 安全
PHP开发框架对比:Laravel、Yii、Tp、Yaf、Swoole
Laravel是一套简洁、优雅的PHP 框架(PHP Web Framework)。让我们可以从杂乱的代码中解脱出来。Laravel可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
587 0
|
网络协议 前端开发 NoSQL
workerman的基本用法(二)
workerman的基本用法(二)
223 0
workerman的基本用法(二)