Maison  >  Article  >  développement back-end  >  Comment utiliser PHP et swoole pour construire une plateforme de consultation en ligne hautement disponible ?

Comment utiliser PHP et swoole pour construire une plateforme de consultation en ligne hautement disponible ?

PHPz
PHPzoriginal
2023-07-21 10:33:091387parcourir

Comment utiliser PHP et swoole pour construire une plateforme de consultation en ligne hautement disponible ?

À l’ère d’Internet, les plateformes de consultation en ligne deviennent le premier choix de plus en plus d’entreprises et de particuliers. Afin de fournir des services de conseil en ligne efficaces et stables, nous pouvons utiliser PHP et swoole pour créer une plateforme de conseil en ligne hautement disponible.

1. Préparation

Avant de commencer, assurez-vous d'avoir installé PHP et l'extension swoole. Vous pouvez installer l'extension swoole via la commande suivante :

pecl install swoole

2 Créer une base de données

Tout d'abord, nous devons créer une base de données pour stocker les informations sur les utilisateurs, les enregistrements de discussion et d'autres données. Vous pouvez utiliser les instructions SQL suivantes pour créer des bases de données et des tables :

CREATE DATABASE online_consulting;
USE online_consulting;

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL
);

CREATE TABLE messages (
    id INT PRIMARY KEY AUTO_INCREMENT,
    sender_id INT NOT NULL,
    receiver_id INT NOT NULL,
    message VARCHAR(255) NOT NULL,
    timestamp INT NOT NULL
);

3. Construisez le serveur

Créez un fichier nommé server.php comme code de notre serveur. Voici un exemple simple :

<?php

$server = new SwooleWebSocketServer('0.0.0.0', 9501);

$server->on('open', function ($server, $request) {
    echo "New client connected: {$request->fd}
";
});

$server->on('message', function ($server, $frame) {
    $data = json_decode($frame->data, true);

    switch ($data['type']) {
        case 'login':
            // 处理登录逻辑
            break;

        case 'message':
            // 处理消息逻辑
            break;
    }
});

$server->on('close', function ($server, $fd) {
    echo "Client disconnected: {$fd}
";
});

$server->start();

4. Traitement de la logique de connexion

Dans le serveur, nous devons traiter la logique de connexion de l'utilisateur. Lorsqu'un utilisateur envoie une demande de connexion, nous devons vérifier le nom d'utilisateur et le mot de passe et renvoyer une réponse correspondante basée sur les résultats de la vérification. Voici un exemple simple :

// 登录逻辑
function handleLogin($server, $frame, $data) {
    $username = $data['username'];
    $password = $data['password'];

    // 从数据库中查询用户信息
    $user = queryUserByUsername($username);

    if (!$user || $user['password'] !== $password) {
        // 登录失败
        $response = [
            'type' => 'login',
            'success' => false,
            'message' => 'Invalid username or password'
        ];
    } else {
        // 登录成功
        $response = [
            'type' => 'login',
            'success' => true,
            'message' => 'Login successful'
        ];
    }

    $server->push($frame->fd, json_encode($response));
}

5. Logique de traitement du message

Lorsqu'un utilisateur envoie un message, nous devons enregistrer le message dans la base de données et l'envoyer au destinataire correspondant. Voici un exemple simple :

// 消息逻辑
function handleMessage($server, $frame, $data) {
    $senderId = $data['sender_id'];
    $receiverId = $data['receiver_id'];
    $message = $data['message'];
    $timestamp = time();

    // 将消息保存到数据库
    saveMessage($senderId, $receiverId, $message, $timestamp);

    // 发送消息给接收者
    $receiverFd = getUserFdById($receiverId);

    if ($receiverFd !== null) {
        $response = [
            'type' => 'message',
            'sender_id' => $senderId,
            'receiver_id' => $receiverId,
            'message' => $message,
            'timestamp' => $timestamp
        ];

        $server->push($receiverFd, json_encode($response));
    }
}

6. Interaction client

Enfin, nous devons utiliser JavaScript pour écrire une page client afin d'interagir avec le serveur. Voici un exemple simple :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Online Consulting Platform</title>
</head>
<body>
    <input type="text" id="username" placeholder="Username">
    <input type="password" id="password" placeholder="Password">
    <button onclick="login()">Login</button>

    <input type="text" id="message" placeholder="Message">
    <button onclick="sendMessage()">Send</button>

    <ul id="messages"></ul>

    <script>
        const socket = new WebSocket('ws://localhost:9501');

        socket.onopen = function() {
            console.log('Connected to server');
        };

        socket.onmessage = function(event) {
            const data = JSON.parse(event.data);

            switch (data.type) {
                case 'login':
                    if (data.success) {
                        console.log('Login successful');
                    } else {
                        console.log('Login failed: ' + data.message);
                    }
                    break;

                case 'message':
                    const li = document.createElement('li');
                    li.innerHTML = data.sender_id + ': ' + data.message;
                    document.getElementById('messages').appendChild(li);
                    break;
            }
        };

        function login() {
            const username = document.getElementById('username').value;
            const password = document.getElementById('password').value;

            const data = {
                type: 'login',
                username: username,
                password: password
            };

            socket.send(JSON.stringify(data));
        }

        function sendMessage() {
            const senderId = 1; // 从数据库中获取当前用户ID
            const receiverId = 2; // 从数据库中获取接收者ID
            const message = document.getElementById('message').value;

            const data = {
                type: 'message',
                sender_id: senderId,
                receiver_id: receiverId,
                message: message
            };

            socket.send(JSON.stringify(data));
        }
    </script>
</body>
</html>

Grâce aux étapes ci-dessus, nous avons complété les principaux exemples de code requis pour créer une plateforme de consultation en ligne hautement disponible utilisant PHP et swoole. Vous pouvez encore améliorer les fonctions en fonction des besoins réels et ajouter certaines mesures de vérification de sécurité nécessaires pour garantir la stabilité et la sécurité de la plateforme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn