Heim  >  Artikel  >  Backend-Entwicklung  >  So nutzen Sie PHP und Socket, um eine Echtzeit-Datenkommunikation zu erreichen

So nutzen Sie PHP und Socket, um eine Echtzeit-Datenkommunikation zu erreichen

WBOY
WBOYOriginal
2023-06-28 08:15:022452Durchsuche

Mit der kontinuierlichen Weiterentwicklung des Internets ist die Echtzeit-Datenkommunikation für verschiedene Anwendungen zum Standard geworden. Die Verwendung von PHP und Socket zur Implementierung der Echtzeit-Datenkommunikation ist eine der gängigsten Methoden. In diesem Artikel wird erläutert, wie Sie mithilfe von PHP und Socket eine Datenkommunikation in Echtzeit erreichen.

Socket ist ein Mechanismus zur Kommunikation zwischen Anwendungen. Es bietet eine Reihe von Standardschnittstellen, die es verschiedenen Anwendungen ermöglichen, zwischen verschiedenen Computern zu kommunizieren. In PHP können Sie die Socket-Erweiterungsbibliothek verwenden, um die Socket-Kommunikation zu implementieren.

Socket-Verbindung implementieren

Um mithilfe der Socket-Verbindung eine Echtzeit-Datenkommunikation zu erreichen, müssen Sie zunächst eine Socket-Verbindung herstellen. Eine Socket-Verbindung besteht normalerweise aus zwei Endpunkten: der Serverseite und der Clientseite.

Serverseite:

$ip = '127.0.0.1';
$port = 8888;

$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_bind($server, $ip, $port);

socket_listen($server);

$client = socket_accept($server);

socket_close($server);

Clientseite:

$ip = '127.0.0.1';
$port = 8888;

$client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_connect($client, $ip, $port);

socket_close($client);

Das Obige sind die grundlegenden Vorgänge zum Herstellen einer Socket-Verbindung, bei der ein Socket-Objekt mithilfe der Funktion socket_create erstellt und durch den socket_bind-Funktion Für die lokale Bindung beginnt die Funktion socket_listen, auf Verbindungsanfragen vom Client zu warten. Sie blockiert, bis die Funktion socket_accept eine Verbindung herstellt ein neues Socket-Objekt. Die Bedienung des Clients ist ebenfalls relativ einfach. Verwenden Sie die Funktion socket_connect, um eine Verbindung zum Server herzustellen, und verwenden Sie die Funktion socket_close, um die Verbindung zu schließen. socket_create 函数创建一个 Socket 对象,socket_bind 函数实现本机的绑定,socket_listen 函数开始监听来自客户端的连接请求,它会一直阻塞直到有客户端连接上来,socket_accept 函数返回一个新的 Socket 对象用于新建连接。客户端的操作也比较简单,使用 socket_connect 函数连接到服务器,并用 socket_close 函数关闭连接。

实现实时数据通信

成功建立 Socket 连接后,就可以开始进行实时数据通信了。在Socket连接中,数据是通过流传输的。服务器端可以通过 socket_recv 函数接收客户端发来的数据,而客户端可以通过 socket_send 函数向服务器端发送数据。

服务器端:

$ip = '127.0.0.1';
$port = 8888;

$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_bind($server, $ip, $port);

socket_listen($server);

$client = socket_accept($server);

while(true){
    $message = socket_recv($client, 1024, MSG_WAITALL);

    if($message === false){
        socket_close($client);
        break;
    }

    echo "收到消息: $message 
";
}

socket_close($server);

客户端:

$ip = '127.0.0.1';
$port = 8888;

$client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_connect($client, $ip, $port);

$message = "Hello World!";
socket_send($client, $message, strlen($message), 0);

socket_close($client);

以上是发送和接收消息的基本操作,在服务器端通过循环解决了一次只能接收一条消息的弊端。这种实时数据通信的方式使用简单、高效,若使用合理,十分有利。

使用WebSocket实现实时数据通信

WebSocket是一种基于HTTP协议的协议,可以在浏览器和服务器之间创建持久连接。在PHP中,可以使用Ratchet等第三方库来实现WebSocket通信。

实现WebSocket连接

服务端代码:

require __DIR__ . '/vendor/autoload.php';

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class WebSocketServer implements MessageComponentInterface {
    protected $clients;

    public function __construct() {
        $this->clients = new SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "有新的客户端连接:{$conn->resourceId}
";
    }

    public function onMessage(ConnectionInterface $from, $message) {
        foreach ($this->clients as $client) {
            if ($from !== $client) {
                $client->send($message);
            }
        }
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "客户端离开:{$conn->resourceId}
";
    }

    public function onError(ConnectionInterface $conn, Exception $e) {
        echo "发生错误:{$e->getMessage()}
";
        $conn->close();
    }

    public function run() {
        $server = RatchetServerIoServer::factory(
            new RatchetHttpHttpServer(
                new RatchetWebSocketWsServer(
                    $this
                )
            ),
            8080
        );

        echo "WebSocket服务已启动...
";

        $server->run();
    }
}

$server = new WebSocketServer();
$server->run();

以上是一个简单的WebSocket Server,使用 MessageComponentInterface 实现了四个基本方法,分别是 onOpen, onMessage, onClose, onError。 在 onOpen 方法中添加了新客户端的资源 ID 以便在客户端离开时识别出该客户端,onMessage 方法中广播了接收到的消息,onClose 方法中从客户端列表中移除离线客户端,onError 方法中处理了与客户端的连接错误。

客户端代码:

var socket = new WebSocket('ws://' + window.location.host + ':8080');

socket.onopen = function() {
    console.log('WebSocket已打开');
};

socket.onerror = function() {
    console.log('WebSocket出错');
};

socket.onmessage = function(event) {
    console.log('收到消息:' + event.data);
};

socket.onclose = function() {
    console.log('WebSocket已关闭');
};

以上是客户端代码,使用 WebSocket 对象创建了一个 WebSocket 连接,并分别处理了 onopen, onerror, onmessage, onclose 事件。在 onmessage

Echtzeit-Datenkommunikation

Nach erfolgreichem Aufbau der Socket-Verbindung können Sie mit der Echtzeit-Datenkommunikation beginnen. Bei einer Socket-Verbindung werden Daten über Streams übertragen. Der Server kann über die Funktion socket_recv Daten vom Client empfangen, und der Client kann über die Funktion socket_send Daten an den Server senden.

Serverseite:

rrreee

Clientseite: 🎜rrreee🎜Die oben genannten sind die grundlegenden Vorgänge beim Senden und Empfangen von Nachrichten. Der Nachteil, dass jeweils nur eine Nachricht empfangen wird, wird durch Schleifen auf der Serverseite behoben. Diese Methode der Echtzeit-Datenkommunikation ist einfach und effizient anzuwenden und bei richtiger Anwendung sehr vorteilhaft. 🎜🎜Verwenden Sie WebSocket für die Echtzeit-Datenkommunikation🎜🎜WebSocket ist ein auf dem HTTP-Protokoll basierendes Protokoll, das eine dauerhafte Verbindung zwischen dem Browser und dem Server herstellen kann. In PHP können Sie Bibliotheken von Drittanbietern wie Ratchet verwenden, um die WebSocket-Kommunikation zu implementieren. 🎜🎜WebSocket-Verbindung implementieren🎜🎜Servercode: 🎜rrreee🎜Das Obige ist ein einfacher WebSocket-Server, der MessageComponentInterface verwendet, um vier grundlegende Methoden zu implementieren, nämlich onOpen, onMessage, onClose, onError . Die Ressourcen-ID des neuen Clients wurde in der Methode onOpen hinzugefügt, um den Client beim Verlassen zu identifizieren. Die empfangene Nachricht wurde in der Methode onMessage gesendet. Der Offline-Client ist wird in der Methode onClose aus der Clientliste entfernt und der Verbindungsfehler mit dem Client wird in der Methode onError behandelt. 🎜🎜Client-Code: 🎜rrreee🎜Das Obige ist der Client-Code, der das WebSocket-Objekt verwendet, um eine WebSocket-Verbindung zu erstellen und die onopen, onerror, onmessage, onclose-Ereignisse zu verarbeiten jeweils. . Die empfangene Nachricht wird in der Methode onmessage ausgegeben. 🎜🎜WebSocket macht die Echtzeitkommunikation zwischen Browser und Server einfacher als herkömmliches Socket. Durch die Verwendung von Bibliotheken von Drittanbietern wie Ratchet zur Implementierung der WebSocket-Kommunikation kann die Entwicklungskomplexität verringert werden. 🎜🎜Fazit🎜🎜Anhand der obigen Einführung können wir sehen, dass die Verwendung von PHP und Socket zur Erzielung einer Echtzeit-Datenkommunikation relativ flexibler ist und auf verschiedene Anwendungsszenarien angewendet werden kann. Gleichzeitig ist die WebSocket-Kommunikation mithilfe von Bibliotheken von Drittanbietern wie Ratchet einfacher zu starten als die herkömmliche Socket-Kommunikation, die auf der Browser- und Serverseite implementiert ist, und kann die Kommunikationsentwicklung in kürzerer Zeit beschleunigen. Entwickler können die geeignete Kommunikationsmethode entsprechend ihren eigenen Anforderungen auswählen. 🎜

Das obige ist der detaillierte Inhalt vonSo nutzen Sie PHP und Socket, um eine Echtzeit-Datenkommunikation zu erreichen. 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