协程版本的Workerman,完全按照Workerman的文档制作,支持协程的创建和切换。虽然目前还在还发中,但是有兴趣的同学可以给在下提提建议,找找BUG。
此项目将会长期维护
PHP 7or Higher
应该没有然后了
//首先修改make.sh,将里面路径修改为自己php的相关路径
./make.sh
//最后别忘了将workerman.so添加到php.ini
<?php
// hook系统函数,目前只hook了sleep函数
Corkerman\Runtime::enableCoroutine();
$worker = new Corkerman\Worker("tcp://0.0.0.0:8080", array(
"backlog" => 1234, // 默认102400,等待accept的连接队列长度
"count" => 2 // 进程数量
));
$worker->name = "tcpServer"; // 设置名字
$worker->onWorkerStart = function ($worker) {
var_dump("onWorkerStart ->" . $worker->workerId);
};
$worker->onConnect = function ($connection) {
$connection->set(array(
"maxSendBufferSize" => 1234
));
echo "new connection id {$connection->id} \n";
};
$worker->onMessage = function ($connection, $data) {
$responseStr = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: Keep-Alive\r\nContent-Length: 11\r\n\r\nhello worla\r\n";
$connection->send($responseStr);
sleep(0.01); // 这个sleep是协程版本的sleep了,扩展会自动切换协程,不会阻塞
};
$worker->onBufferFull = function ($connection) {
echo "bufferFull and do not send again\n";
};
$worker->onError = function ($connection, $code, $msg) {
var_dump($code);
var_dump($msg);
echo "connection error ,id {$connection->id} \n";
};
$worker->onClose = function ($connection) {
echo "connection closed\n";
};
// 监听另外一个端口
$worker2 = new Corkerman\Worker("tcp://0.0.0.0:8081");
$worker2->onMessage = function ($connection, $data) {
$responseStr = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: Keep-Alive\r\nContent-Length: 11\r\n\r\nhello worlb\r\n";
$connection->send($responseStr);
};
Corkerman\Worker::runAll();
//更多协程例子在test文件夹下
php start.php start
php start.php start -d
php start.php stop
目标是完全和workerman一样: http://doc.workerman.net
--------->>>> 但是还有非常多没实现
作者QQ群: 342016184
感谢Workerman项目 Workerman,我完全仿照Workerman源码和文档制作。
感谢Swoole项目 Swoole,我直接copy了不少Swoole的代码
最后特别感谢 Study 项目,我是学习这个教学项目之后,才有了此项目