Этот проект является версией workerman (v3.4.5), перенесённой на swoole. Из него были удалены зависимости от pcntl, libevent, event и ev, вместо них используются swoole_process и swoole_event, предоставляемые swoole, а для таймеров применяется swoole_timer. Для сервера используется расширение stream.
composer require fage1151/swoole-worker
Использование аналогично workerman.
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
// Создание веб-сокета сервера
$ws_worker = new Worker("websocket://0.0.0.0:2346");
// 4 процесса
$ws_worker->count = 4;
// Вызывается при новом соединении
$ws_worker->onConnect = function($connection) {
echo "Новое соединение\n";
};
// Вызывается при получении данных
$ws_worker->onMessage = function($connection, $data) {
// Отправить приветствие $data
$connection->send('hello ' . $data);
};
// Вызывается при закрытии соединения
$ws_worker->onClose = function($connection) {
echo "Соединение закрыто\n";
};
// Запуск рабочего
Worker::runAll();
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
// #### HTTP рабочий ####
$http_worker = new Worker("http://0.0.0.0:2345");
// 4 процесса
$http_worker->count = 4;
// Вызывается при получении данных
$http_worker->onMessage = function($connection, $data) {
// $_GET, $_POST, $_COOKIE, $_SESSION, $_SERVER, $_FILES доступны
var_dump($_GET, $_POST, $_COOKIE, $_SESSION, $_SERVER, $_FILES);
// отправить данные клиенту
$connection->send("hello world \n");
};
// запустить всех рабочих
Worker::runAll();
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\WebServer;
use Workerman\Worker;
// Веб-сервер
$web = new WebServer("http://0.0.0.0:80");
// 4 процесса
$web->count = 4;
// Установить корень доменов
$web->addRoot('www.your_domain.com', '/your/path/Web');
$web->addRoot('www.another_domain.com', '/another/path/Web');
// запустить всех рабочих
Worker::runAll();
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
// #### создать сокет и слушать порт 1234 ####
$tcp_worker = new Worker("tcp://0.0.0.0:1234");
// 4 процесса
$tcp_worker->count = 4;
// Вызывается при новом соединении
$tcp_worker->onConnect = function($connection) {
echo "Новое Connection\n";
};
// Вызывается при получении данных
$tcp_worker->onMessage = function($connection, $data) {
// отправить данные клиенту
$connection->send("привет $data \n");
};
// Вызывается при новом соединении
$tcp_worker->onClose = function($connection) {
echo "Connection closed\n";
};
Worker::runAll();
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
// Контекст SSL.
$context = array(
'ssl' => array(
'local_cert' => '/your/path/of/server.pem',
'local_pk' => '/your/path/of/server.key',
)
);
// Создать веб-сокет-сервер с контекстом SSL.
$ws_worker = new Worker("websocket://0.0.0.0:2346", $context);
// Включить SSL. WebSocket+SSL означает защищённый WebSocket (wss://).
// Аналогичные подходы для Https и т. д.
$ws_worker->transport = 'ssl';
$ws_worker->onMessage = function($connection, $data) {
// Send hello $data
$connection->send('hello ' . $data);
};
Worker::runAll();
Protocols/MyTextProtocol.php
<?php
namespace Protocols;
/**
* Определённый пользователем протокол
* Формат Текст+"\n"
*/
class MyTextProtocol
{
public static function input($recv_buffer) { Данный текст написан на языке PHP.
// Find the position of the first occurrence of "\n" $pos = strpos($recv_buffer, "\n"); // Not a complete package. Return 0 because the length of package can not be calculated if ($pos === false) { return 0; } // Return length of the package return $pos + 1; }
public static function decode($recv_buffer) { return trim($recv_buffer); }
public static function encode($data) { return $data . "\n"; }
```php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
// #### MyTextProtocol worker ####
$text_worker = new Worker("MyTextProtocol://0.0.0.0:5678");
$text_worker->onConnect = function ($connection) {
echo "New connection\n";
};
$text_worker->onMessage = function ($connection, $data) {
// send data to client
$connection->send("hello world \n");
};
$text_worker->onClose = function ($connection) {
echo "Connection closed\n";
};
// run all workers
Worker::runAll();
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
$task = new Worker();
$task->onWorkerStart = function ($task) {
// 2.5 seconds
$time_interval = 2.5;
$timer_id = Timer::add($time_interval, function () {
echo "Timer run\n";
});
};
// run all workers
Worker::runAll();
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
$worker = new Worker();
$worker->onWorkerStart = function() {
// Websocket protocol for client.
$ws_connection = new AsyncTcpConnection("ws://echo.websocket.org:80");
$ws_connection->onConnect = function($connection) {
$connection->send('hello');
};
$ws_connection->onMessage = function($connection, $data) {
echo "recv: $data\n";
};
$ws_connection->onError = function($connection, $code, $msg) {
echo "error: $msg\n";
};
$ws_connection->onClose = function($connection) {
echo "connection closed\n";
};
$ws_connection->connect();
};
Worker::runAll();
<?php
/**
* run with command
* php start.php start
*/
use \Workerman\Worker;
use \Workerman\Clients\Tcp;
require_once '../Autoloader.php';
$worker = new Worker();
$worker->onWorkerStart = function (Worker $worker) {
$url = 'www.workerman.net:80';
$tcp = new Tcp($url);
$tcp->onConnect = function ($client) {
$client->send('123');
};
$tcp->onReceive = function ($client, $data) {
var_dump($data);
};
$tcp->connect();
};
$worker->count = 1;
Worker::$stdoutFile = '/tmp/oauth.log';
Worker::$logFile = __DIR__ . '/workerman.log';
Worker::$pidFile = __DIR__ . "/" . str_replace('/', '_', __FILE__) . ".pid";
// 运行所有服务
Worker::runAll();
<?php
/**
* run with command
* php start.php start
*/
use \Workerman\Worker;
use \Workerman\Clients\Ws;
use \Swoole\Http\Client;
require_once '../Autoloader.php';
$worker = new Worker();
$worker->onWorkerStart = function (Worker $worker) {
$url = 'laychat.workerman.net:9292';
$tcp = new Ws($url);
$tcp->onConnect = function (Client $client) {
var_dump($client);
};
$tcp->onMessage = function (Client $client, $data) {
$client->push('{"type":"ping"}');
var_dump($data);
};
$tcp->connect();
};
$worker->count = 1;
Worker::$stdoutFile = '/tmp/oauth.log';
Worker::$logFile = __DIR__ . '/workerman.log';
Worker::$pidFile = __DIR__ . "/" . str_replace('/', '_', __FILE__) . ".pid";
// 运行所有服务
Worker::runAll();
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
$worker = new Worker('tcp://0.0.0.0:6161');
$worker->onWorkerStart = function() {
swoole_async_dns_lookup("www.baidu.com", function($host, $ip) {
echo "{$host} : {$ip}\n";
});
};
$worker->onMessage = function($connection, $host) {
};
``` **Worker::runAll();**
### Async Http Client
*https网站需要依赖openssl,必须在编译swoole时启用--enable-openssl*
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )