Heim  >  Artikel  >  PHP-Framework  >  Unterschiede zwischen verschiedenen Swoole-Servern

Unterschiede zwischen verschiedenen Swoole-Servern

(*-*)浩
(*-*)浩Original
2019-12-16 10:05:002820Durchsuche

Unterschiede zwischen verschiedenen Swoole-Servern

server.php 🎜>)

//创建Server对象,监听 127.0.0.1:9501端口
$serv = new Swoole\Server("127.0.0.1", 9501); 
//监听连接进入事件
$serv->on('Connect', function ($serv, $fd) {  
    echo "Client: Connect.\n";
});
//监听数据接收事件
$serv->on('Receive', function ($serv, $fd, $from_id, $data) {
    $serv->send($fd, "Server: ".$data);
});
//监听连接关闭事件
$serv->on('Close', function ($serv, $fd) {
    echo "Client: Close.\n";
});
//启动服务器
$serv->start();

Hier wird ein TCP-Server erstellt, der auf dem Server lauscht lokaler Port 9501.

Die Logik ist sehr einfach. Wenn der Client-Socket einen Hallo-String über das Netzwerk sendet, antwortet der Server mit einem Server: Hallo-String. Server ist ein asynchroner Server, daher wird das Programm durch Abhören von Ereignissen geschrieben. Wenn das entsprechende Ereignis eintritt, ruft die zugrunde liegende Schicht die angegebene Funktion aktiv zurück. Wenn beispielsweise eine neue TCP-Verbindung eingeht, wird der onConnect-Ereignisrückruf ausgeführt. Wenn eine Verbindung Daten an den Server sendet, wird die onReceive-Funktion zurückgerufen.

UDP-Server unterscheidet sich vom TCP-Server. UDP hat kein Verbindungskonzept.

Nach dem Starten des Servers kann der Client ohne Connect Datenpakete direkt an den vom Server überwachten Port 9502 senden. Das entsprechende Ereignis ist onPacket. $clientInfo ist die relevante Information des Clients, die ein Array ist. Es enthält die IP und den Port des Clients und andere Inhalte. Rufen Sie die Methode $server->sendto auf >

HTTP-Server Sie müssen nur auf die Anforderungsantwort achten, sodass Sie nur ein onRequest-Ereignis abhören müssen.

Dieses Ereignis wird ausgelöst, wenn eine neue HTTP-Anfrage eingeht. Die Ereignisrückruffunktion verfügt über zwei Parameter. Einer ist das $request-Objekt, das anforderungsbezogene Informationen enthält, z. B. GET/POST-Anforderungsdaten.

Das andere ist das Antwortobjekt. Die Antwort auf die Anfrage kann durch Betätigen des Antwortobjekts abgeschlossen werden. Die Methode $response->end() bedeutet, einen Teil des HTML-Inhalts auszugeben und die Anfrage zu beenden.

0.0.0.0 bedeutet die Überwachung aller IP-Adressen gleichzeitig, z. B. 127.0.0.1 lokale Loopback-IP, 192.168.1.100 LAN-IP, 210.127.20.2 externe Netzwerk-IP kann auch separat verwendet werden. Geben Sie einen Überwachungsport für IP9501 an. Wenn er belegt ist, gibt das Programm einen schwerwiegenden Fehler aus und unterbricht die Ausführung.

Der WebSocket-Server ist ein auf einem HTTP-Server aufgebauter Server mit langer Verbindung. Der Client sendet zunächst eine HTTP-Anfrage, um dem Server die Hand zu geben.

Nachdem der Handshake erfolgreich war, wird das onOpen-Ereignis ausgelöst, das anzeigt, dass die Verbindung bereit ist. Das $request-Objekt kann in der onOpen-Funktion abgerufen werden, die Informationen zum HTTP-Handshake enthält. wie GET-Parameter, Cookies, HTTP-Header-Informationen usw.

Nachdem die Verbindung hergestellt ist, können Client und Server in zwei Richtungen kommunizieren.

Wenn der Client Informationen an den Server sendet, löst der Server den onMessage-Ereignisrückruf aus. Der Server kann $server->push() aufrufen, um eine Nachricht an einen Client zu senden (unter Verwendung der $fd-Kennung). Der Server kann den onHandShake-Ereignisrückruf einrichten, um den WebSocket-Handshake manuell abzuwickeln.

swoole_http_server ist eine Unterklasse von swoole_server mit integrierter HTTP-Unterstützung. swoole_websocket_server ist eine Unterklasse von swoole_http_server mit integrierter WebSocket-Unterstützung.

Das obige ist der detaillierte Inhalt vonUnterschiede zwischen verschiedenen Swoole-Servern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn