Grundlegender Prozess
(Anhand eines einfachen Websocket-Chat-Server-Beispiels)
1. Erstellen Sie ein Projektverzeichnis an beliebiger Stelle
Zum Beispiel SimpleChat/
Betreten Sie das Verzeichnis und führen Sie composer require workerman/workerman aus.
2. Binden Sie vendor/autoload.php ein (nach der Installation durch Composer erstellt)
Erstellen Sie start.php und binden Sie vendor/autoload.php ein.
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
3. Wählen Sie das Protokoll aus
Hier wählen wir das Text-Protokoll (ein benutzerdefiniertes Protokoll in Workerman im Format von Text + Zeilenumbruch).
(Workerman unterstützt derzeit HTTP, Websocket und Text-Protokolle. Wenn Sie andere Protokolle verwenden müssen, beziehen Sie sich bitte auf das Kapitel über Protokolle, um Ihr eigenes Protokoll zu entwickeln.)
4. Schreiben Sie das Startskript je nach Bedarf
Das folgende Beispiel ist eine einfache Chat-Einstiegsdatei.
SimpleChat/start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$global_uid = 0;
// Weisen Sie beim Verbindungsaufbau des Clients eine uid zu, speichern Sie die Verbindung und benachrichtigen Sie alle Clients
function handle_connection($connection)
{
global $text_worker, $global_uid;
// Weisen Sie dieser Verbindung eine uid zu
$connection->uid = ++$global_uid;
}
// Wenn der Client eine Nachricht sendet, leiten Sie diese an alle weiter
function handle_message(TcpConnection $connection, $data)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] said: $data");
}
}
// Wenn der Client die Verbindung trennt, broadcasten Sie an alle Clients
function handle_close($connection)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] logout");
}
}
// Erstellen Sie einen Worker für das Textprotokoll, der auf dem Port 2347 lauscht
$text_worker = new Worker("text://0.0.0.0:2347");
// Starten Sie nur 1 Prozess, um den Datenaustausch zwischen den Clients zu erleichtern
$text_worker->count = 1;
$text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';
Worker::runAll();
5. Testen
Das Textprotokoll kann mit dem telnet-Befehl getestet werden
telnet 127.0.0.1 2347