workerman想通過TP、CI之類的PHP架構來啟用
提示:PHP CI 架構下內建使用 workerman
文章目錄
- workerman想通過TP、CI之類的PHP架構來啟用
- 前言
- 一、如何在CI架構中使提供websocket服務?
- 二、使用步驟
-
- 1.環境搭建
- 2.下載下傳workerman
- 二、建立操作控制器
-
- 1.建立Workerman 控制器
- 2.啟動 Workerman 方法
- 2.啟動 Workerman
- 總結
前言
提示:這裡可以添加本文要記錄的大概内容:
例如:随着人工智能的不斷發展,機器學習這門技術也越來越重要,很多人都開啟了學習機器學習,本文就介紹了機器學習的基礎内容。
提示:以下是本篇文章正文内容,下面案例可供參考
一、如何在CI架構中使提供websocket服務?
示例:與ThinkPHP,CI等架構結合
使用GatewayWorker時開發者最關心的是如何與現有mvc架構(ThinkPHP Yii laravel等)
總體原則:
現有mvc架構項目與GatewayWorker獨立部署互不幹擾
二、使用步驟
1.環境搭建
請參考 http://doc3.workerman.net/315115
2.下載下傳workerman
WorkerMan實際上就是一個PHP代碼包,如果你的PHP環境已經裝好,隻需要把WorkerMan源代碼或者demo下載下傳下來即可運作。
Composer安裝:
composer require workerman/workerman
Git安裝:
git clone https://github.com/walkor/Workerman
二、建立操作控制器
1.建立Workerman 控制器
切換到項目目錄下 controller 目錄
// Workerman controller
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once '../vender/workerman/workerman/Autoloader.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
use \Workerman\Connection\AsyncTcpConnection;
class Workerman extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function server(){
$task_worker = new Worker('Text://0.0.0.0:3061');
// task程序數可以根據需要多開一些
$task_worker->count = 20;
$task_worker->name = '任務名稱';
//隻有php7才支援task->reusePort,可以讓每個task程序均衡的接收任務
//$task->reusePort = true;
$task_worker->onMessage = function($connection, $task_data)
{
// 假設發來的是json資料
$task_data = json_decode($task_data, true);
echo "\r\n";
//業務了邏輯。。。。。。。。。可調用CI 程式
// 發送結果
// $connection->send(json_encode($task_result));
};
Worker::runAll();
}
}
?>
2.啟動 Workerman 方法
啟動
以debug(調試)方式啟動
php start.php start
以daemon(守護程序)方式啟動
php start.php start -d
停止
php start.php stop
重新開機
php start.php restart
平滑重新開機
php start.php reload
檢視狀态
php start.php status
但是引用了架構需要修改預設的路由,将第一路由作為控制器和方法調用
修改檔案 Workerman/Workerman/worker.php
runAll 方法
public static function runAll()
{
static::checkSapiEnv();
static::init();
static::lock();
static::parseCommand();
static::daemonize();
static::initWorkers();
static::installSignal();
static::saveMasterPid();
static::unlock();
static::displayUI();
static::forkWorkers();
static::resetStd();
static::monitorWorkers();
}
//修改删除預設擷取的第一路由
//在頭部增加
global $argv;
unset($argv[1]);
$argv = array_values($argv);
2.啟動 Workerman
切換到項目根目錄
運作
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLwkTN4ADNycTMxADNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
啟動成功
守護程序方式啟動
總結
本文介紹了在第三方架構下如何內建使用workerman的啟動方式,應該怎麼加參數才可以實作類似直接啟動workerman的效果,如何帶入架構路由啟動服務,并可以通過workerman 方式調用架構進行業務處理。