<?php
ini_set("memory_limit", "-1");
use Workerman\Worker;
use \Workerman\Lib\Timer;
use Applications\My\Service\TestTime;
//引入自动加载类
//第一种方法
//require_once __DIR__ . '/../../vendor/autoload.php';
//第二种方法
require_once __DIR__.'/../../vendor/workerman/workerman/Autoloader.php';
// 创建一个Worker监听1234端口,使用http协议通讯
$http_worker = new Worker('http://0.0.0.0:1234');
//设定名字
$http_worker->name = 'TestTimeWorker';
// 启动1个进程对外提供服务
$http_worker->count = 1;
//设置Worker子进程启动时的回调函数,每个子进程启动时都会执行
$http_worker->onWorkerStart = function ($http_worker) {
Timer::add(1, function () {
TestTime::doData();
});
};
//接收到浏览器发送的数据时回复hello world给浏览器
$http_worker->onMessage = function ($connection, $data) {
// 向浏览器发送hello world
$connection->send('hello world');
};
// 如果不是在根目录启动,则运行runAll方法,运行worker
if (!defined('GLOBAL_START')) {
Worker::runAll();
}
报错:
Class 'Applications\My\Service\TestTime' not found in /Users/rich/www/myworkerman/Applications/My/start_demotime.php:38
不能有die
因为你的项目没有自动加载功能吧。
自己写一个autload自动加载,如果不会写就用composer给你项目生成一个自动加载。
项目根目录执行
composer require workerman/workerman
,会生成composer.json内容如下将composer.json改为
执行
composer dumpautoload
然后代码里引用自动加载文件
这样就给你自己的项目生成了一个自动加载,符合psr4规范的类都可以自动加载进来
感谢大佬,按你说的确实可以了,想问下require_once __DIR__ . '/vendor/autoload.php';和vendor/workerman/workerman/Autoloader.php';有什么区别吗
workerman/Autoloader.php'; 感觉是给非vendor环境用的加载workerman自身类文件的,估计不能自动加载你的业务类。vendor/autoload.php 是使用composer安装的类都可以自动加载