<?php
ini_set("memory_limit", "-1");
use Workerman\Worker;
use \Workerman\Lib\Timer;
use Applications\My\Service\TestTime;
//引入自動(dòng)加載類
//第一種方法
//require_once __DIR__ . '/../../vendor/autoload.php';
//第二種方法
require_once __DIR__.'/../../vendor/workerman/workerman/Autoloader.php';
// 創(chuàng)建一個(gè)Worker監(jiān)聽1234端口,使用http協(xié)議通訊
$http_worker = new Worker('http://0.0.0.0:1234');
//設(shè)定名字
$http_worker->name = 'TestTimeWorker';
// 啟動(dòng)1個(gè)進(jìn)程對外提供服務(wù)
$http_worker->count = 1;
//設(shè)置Worker子進(jìn)程啟動(dòng)時(shí)的回調(diào)函數(shù),每個(gè)子進(jìn)程啟動(dòng)時(shí)都會(huì)執(zhí)行
$http_worker->onWorkerStart = function ($http_worker) {
Timer::add(1, function () {
TestTime::doData();
});
};
//接收到瀏覽器發(fā)送的數(shù)據(jù)時(shí)回復(fù)hello world給瀏覽器
$http_worker->onMessage = function ($connection, $data) {
// 向?yàn)g覽器發(fā)送hello world
$connection->send('hello world');
};
// 如果不是在根目錄啟動(dòng),則運(yùn)行runAll方法,運(yùn)行worker
if (!defined('GLOBAL_START')) {
Worker::runAll();
}
報(bào)錯(cuò):
Class 'Applications\My\Service\TestTime' not found in /Users/rich/www/myworkerman/Applications/My/start_demotime.php:38
因?yàn)槟愕捻?xiàng)目沒有自動(dòng)加載功能吧。
自己寫一個(gè)autload自動(dòng)加載,如果不會(huì)寫就用composer給你項(xiàng)目生成一個(gè)自動(dòng)加載。
項(xiàng)目根目錄執(zhí)行composer require workerman/workerman
,會(huì)生成composer.json內(nèi)容如下
{
"require": {
"workerman/workerman": "^4.0"
}
}
將composer.json改為
{
"require": {
"workerman/workerman": "^4.0"
},
"autoload": {
"psr-4" : {
"Applications\\" : "./Applications"
}
}
}
執(zhí)行 composer dumpautoload
然后代碼里引用自動(dòng)加載文件
require_once __DIR__ . '/vendor/autoload.php';
這樣就給你自己的項(xiàng)目生成了一個(gè)自動(dòng)加載,符合psr4規(guī)范的類都可以自動(dòng)加載進(jìn)來
感謝大佬,按你說的確實(shí)可以了,想問下require_once __DIR__ . '/vendor/autoload.php';和vendor/workerman/workerman/Autoloader.php';有什么區(qū)別嗎
workerman/Autoloader.php'; 感覺是給非vendor環(huán)境用的加載workerman自身類文件的,估計(jì)不能自動(dòng)加載你的業(yè)務(wù)類。vendor/autoload.php 是使用composer安裝的類都可以自動(dòng)加載