Benutzerdefinierte Prozesse
In Webman können Sie wie in Workerman benutzerdefinierte Listener oder Prozesse erstellen.
Hinweis
Windows-Benutzer müssenphp windows.phpverwenden, um Webman zu starten, um benutzerdefinierte Prozesse zu starten.
Benutzerdefinierter HTTP-Dienst
Manchmal haben Sie möglicherweise spezifische Anforderungen, die eine Änderung des Kerncodes des Webman HTTP-Dienstes erfordern. In diesem Fall können Sie benutzerdefinierte Prozesse verwenden.
Erstellen Sie beispielsweise app\Server.php
<?php
namespace app;
use Webman\App;
class Server extends App
{
    // Hier überschreiben Sie die Methoden von Webman\App
}Fügen Sie in config/process.php die folgende Konfiguration hinzu
use Workerman\Worker;
return [
    // ... andere Konfigurationen wurden hier weggelassen...
    'my-http' => [
        'handler' => app\Server::class,
        'listen' => 'http://0.0.0.0:8686',
        'count' => 8, // Anzahl der Prozesse
        'user' => '',
        'group' => '',
        'reusePort' => true,
        'constructor' => [
            'requestClass' => \support\Request::class, // request-Klassen-Einstellung
            'logger' => \support\Log::channel('default'), // Protokollinstanz
            'appPath' => app_path(), // Speicherort des app-Verzeichnisses
            'publicPath' => public_path() // Speicherort des public-Verzeichnisses
        ]
    ]
];Hinweis
Wenn Sie den mitgelieferten HTTP-Prozess von Webman deaktivieren möchten, setzen Sie einfach inconfig/server.phplisten=>''.
Beispiel für benutzerdefiniertes WebSocket-Listening
Erstellen Sie app/Pusher.php
<?php
namespace app;
use Workerman\Connection\TcpConnection;
class Pusher
{
    public function onConnect(TcpConnection $connection)
    {
        echo "onConnect\n";
    }
    public function onWebSocketConnect(TcpConnection $connection, $http_buffer)
    {
        echo "onWebSocketConnect\n";
    }
    public function onMessage(TcpConnection $connection, $data)
    {
        $connection->send($data);
    }
    public function onClose(TcpConnection $connection)
    {
        echo "onClose\n";
    }
}Hinweis: Alle onXXX-Attribute sind public
Fügen Sie in config/process.php die folgende Konfiguration hinzu
return [
    // ... andere Prozesskonfigurationen wurden weggelassen ...
    // websocket_test ist der Prozessname
    'websocket_test' => [
        // Hier geben Sie die Prozessklasse an, das ist die oben definierte Pusher-Klasse
        'handler' => app\Pusher::class,
        'listen'  => 'websocket://0.0.0.0:8888',
        'count'   => 1,
    ],
];Beispiel für benutzerdefinierte Nicht-Listening-Prozesse
Erstellen Sie app/TaskTest.php
<?php
namespace app;
use Workerman\Timer;
use support\Db;
class TaskTest
{
    public function onWorkerStart()
    {
        // Alle 10 Sekunden überprüfen, ob neue Benutzer im Database registriert sind
        Timer::add(10, function(){
            Db::table('users')->where('regist_timestamp', '>', time()-10)->get();
        });
    }
}Fügen Sie in config/process.php die folgende Konfiguration hinzu
return [
    // ... andere Prozesskonfigurationen wurden weggelassen ...
    'task' => [
        'handler'  => app\TaskTest::class
    ],
];Hinweis: Wenn
listenweggelassen wird, wird kein Port überwacht, wenncountweggelassen wird, beträgt die Standardanzahl der Prozesse 1.
Erläuterung der Konfigurationsdatei
Eine vollständige Konfigurationsdefinition für einen Prozess sieht wie folgt aus:
return [
    // ... 
    // websocket_test ist der Prozessname
    'websocket_test' => [
        // Hier geben Sie die Prozessklasse an
        'handler' => app\Pusher::class,
        // Überwachtes Protokoll, IP und Port (optional)
        'listen'  => 'websocket://0.0.0.0:8888',
        // Anzahl der Prozesse (optional, Standard 1)
        'count'   => 2,
        // Benutzer, unter dem der Prozess ausgeführt wird (optional, Standard aktueller Benutzer)
        'user'    => '',
        // Benutzergruppe, unter der der Prozess ausgeführt wird (optional, Standard aktuelle Benutzergruppe)
        'group'   => '',
        // Ob der aktuelle Prozess Reload unterstützt (optional, Standard true)
        'reloadable' => true,
        // Ob reusePort aktiviert ist 
        'reusePort'  => true,
        // transport (optional, wenn SSL aktiviert werden muss, auf ssl setzen, Standard tcp)
        'transport'  => 'tcp',
        // context (optional, wenn transport ssl ist, muss der Pfad zum Zertifikat übergeben werden)
        'context'    => [], 
        // Konstruktorparameter der Prozessklasse, hier Parameter des Prozesses\Pusher::class (optional)
        'constructor' => [],
        // Ob der aktuelle Prozess aktiviert ist
        'enable' => true
    ],
];Zusammenfassung
Der benutzerdefinierte Prozess von Webman ist tatsächlich eine einfache Verpackung von Workerman, die Konfiguration und Geschäftslogik trennt und die onXXX-Rückrufe von Workerman durch Klassenmethoden implementiert. Die anderen Anwendungen sind identisch zu Workerman.