https://wenda.workerman.net/question/3128 我看了這個(gè)問題,但是大大只給出了如何開啟swoole事件驅(qū)動(dòng),如何在workerman中使用缺沒給出實(shí)例。
不知道swoole那些類或函數(shù)能夠使用
難道是直接在workerman中像這樣寫代碼就行嗎?
function send($phone, $message){
go(function () use($phone, $message){
$sms = new Sms();
$sms->send($phone, $message);
});
return true;
}
如何是這么用的話,是必須開啟swoole事件驅(qū)動(dòng)才能用,還是說不需要開啟就可以這么使用?
?
我剛接觸這方面的知識(shí),還有很多地方不明白,麻煩大大指點(diǎn)下。。。不勝感激!
貼上代碼,幫助其他phper
服務(wù)端:
<?php
use Workerman\Worker;
require_once __DIR__ . '/../vendor/autoload.php';
$http_worker = new Worker("tcp://0.0.0.0:2345");
// 啟動(dòng)4個(gè)進(jìn)程對外提供服務(wù)
$http_worker->count = 4;
$http_worker->onMessage = function ($connection, $data) {
for ($i = 0; $i < 10; $i++) {
go(function () use ($connection, $i) {
Co::sleep(1);
$connection->send(microtime(true) . ": hello" . $i);
});
};
$connection->send($data);
};
// 啟用swoole的事件驅(qū)動(dòng)
Worker::$eventLoopClass = 'Workerman\Events\Swoole';
Worker::runAll();
客戶端:
<?php
use \Workerman\Worker;
use \Workerman\Connection\AsyncTcpConnection;
require_once __DIR__ . '/../vendor/autoload.php';
$task = new Worker();
$task->onWorkerStart = function($task)
{
$connection_to_baidu = new AsyncTcpConnection('tcp://127.0.0.1:2345');
$connection_to_baidu->onConnect = function($connection_to_baidu)
{
$connection_to_baidu->send("ping");
};
$connection_to_baidu->onMessage = function($connection_to_baidu, $http_buffer)
{
echo $http_buffer."\n";
};
$connection_to_baidu->onClose = function($connection_to_baidu)
{
echo "connection closed\n";
};
$connection_to_baidu->onError = function($connection_to_baidu, $code, $msg)
{
echo "Error code:$code msg:$msg\n";
};
$connection_to_baidu->connect();
};
// 運(yùn)行worker
Worker::runAll();
Workerman\Events\Swoole 這個(gè)是怎么來的 不是很了解
1、swoole不僅僅是作為一個(gè)異步網(wǎng)絡(luò)通信引擎存在的PHP擴(kuò)展,同時(shí)也是一個(gè)異步事件驅(qū)動(dòng)
庫。
2、Workerman\Events\Swoole 是對swoole事件驅(qū)動(dòng)的封調(diào)用裝實(shí)現(xiàn),其源代碼在workerman源碼中就能找到。
Workerman\Events\Swoole.php
里的 use Swoole\Event; use Swoole\Timer; 這兩個(gè)東東在哪里?
Worker::$eventLoopClass = 'Workerman\Events\Swoole';
啟用swoole事件驅(qū)動(dòng)后,用php start.php stop停止workerman,會(huì)報(bào)錯(cuò):
Fatal error: Uncaught Swoole\ExitException: swoole exit in /Users/....../GatewayWorker/vendor/workerman/workerman/Worker.php:1808
Stack trace:
#0 /Users/....../GatewayWorker/vendor/workerman/workerman/Worker.php(1120): Workerman\Worker::stopAll()
#1 [internal function]: Workerman\Worker::signalHandler(2, Array)
#2 /Users/....../GatewayWorker/vendor/workerman/workerman/Events/Swoole.php(52): pcntl_signal_dispatch()
#3 {main}
thrown in /Users/....../GatewayWorker/vendor/workerman/workerman/Worker.php on line 1808
請問下怎么解決呢