Mit der Entwicklung des Internets ist das interaktive Online-Frage- und Antwortsystem in Echtzeit nach und nach zu einer gängigen Netzwerkanwendung geworden. Es kann nicht nur die Bedürfnisse der Benutzer nach Echtzeitkommunikation erfüllen, sondern auch die Bindung und Beteiligung der Benutzer verbessern. In diesem Artikel werden wir PHP und WebSocket als Grundlage verwenden, um die Implementierung eines Echtzeit-Online-Frage- und Antwortsystems vorzustellen und spezifische Codebeispiele bereitzustellen, damit die Leser es besser verstehen und lernen können.
1. Was ist WebSocket? WebSocket ist ein bidirektionaler Kommunikationsstandard, der auf dem TCP-Protokoll basiert. Es kann eine Echtzeitverbindung zwischen dem Webbrowser und dem Webserver herstellen, um eine Echtzeit-Datenübertragung zu realisieren. Über WebSocket können wir Daten von Webanwendungen in Echtzeit an den Client übertragen oder Echtzeitanforderungen und -antworten vom Client empfangen.
2. Warum WebSocket verwenden, um ein Echtzeit-Online-Frage- und Antwortsystem zu implementieren?
Die herkömmliche Ajax-Abfragemethode weist einige Probleme hinsichtlich Leistung und Stabilität auf, z. B. zunehmenden Serverdruck und Netzwerkverzögerung. Die Verwendung von WebSocket kann diese Fragen effektiv optimieren und das Frage- und Antwortsystem reibungsloser und stabiler machen.
3. So verwenden Sie PHP und WebSocket, um ein Echtzeit-Online-Frage- und Antwortsystem zu implementieren.
WebSocket installieren. Wir können die PHP-WebSocket-Klassenbibliothek verwenden, um WebSocket zu implementieren. In diesem Artikel verwenden wir den PHP-WAMP-Server (https://wampserver.com/), um eine Entwicklungsumgebung einzurichten und die PHP-WebSocket-Klassenbibliothek (https://github.com/Textalk/websocket-php) zu installieren.use WebSocketServer; $server = new Server('127.0.0.1', 8080); $server->on('open', function($conn) { echo "New connection added: {$conn->getId()} "; }); $server->on('message', function($conn, $msg) use ($server) { $server->broadcast($msg); }); $server->run();
Erstellen Sie ein Frage- und Antwortsystem.
Als Nächstes müssen wir ein Frage- und Antwortsystem erstellen, um Benutzerfragen und -antworten zu verarbeiten. Wir können dieses System mit PHP und MySQL implementieren.CREATE TABLE `questions_info` ( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `title` varchar(255) NOT NULL, `content` text NOT NULL, `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE `answers_info` ( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `question_id` int(11) NOT NULL, `content` text NOT NULL, `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP );
use WebSocketClient; // 引入数据库连接信息 require_once 'config.php'; // 创建MySQL连接对象 $mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME); // 处理用户提交问题 if (isset($_POST['submit'])) { $title = $mysqli->real_escape_string($_POST['title']); $content = $mysqli->real_escape_string($_POST['content']); $query = "INSERT INTO questions_info (title, content) VALUES ('$title', '$content')"; $mysqli->query($query); $id = $mysqli->insert_id; // 推送新问题到客户端 $client = new Client('ws://127.0.0.1:8080'); $client->send('{"type":"new_question","id":'.$id.',"title":"'.$title.'","content":"'.$content.'"}'); } // 查询已有问题 $query = "SELECT * FROM questions_info ORDER BY create_time DESC"; $result = $mysqli->query($query); // 输出问题列表 while ($row = $result->fetch_assoc()) { $question_id = $row['id']; $question_title = $row['title']; $question_content = $row['content']; // 查询问题回答数 $query = "SELECT COUNT(*) FROM answers_info WHERE question_id=$question_id"; $answer_count = $mysqli->query($query)->fetch_row()[0]; ?> <div class="question-item"> <h3 class="question-title"> <a href="question.php?id=<?php echo $question_id; ?>"><?php echo $question_title; ?></a> </h3> <div class="question-content"><?php echo $question_content; ?></div> <div class="question-meta"> <span class="answer-count"><?php echo $answer_count; ?>回答</span> </div> </div> <?php } ?>
// 处理用户提交回答 if (isset($_POST['submit'])) { $question_id = $_POST['question_id']; $content = $mysqli->real_escape_string($_POST['content']); $query = "INSERT INTO answers_info (question_id, content) VALUES ('$question_id', '$content')"; $mysqli->query($query); $id = $mysqli->insert_id; // 推送新回答到客户端 $client = new Client('ws://127.0.0.1:8080'); $client->send('{"type":"new_answer","id":'.$id.',"question_id":'.$question_id.',"content":"'.$content.'"}'); } // 查询问题和回答列表 $question_id = $_GET['id']; $query = "SELECT * FROM questions_info WHERE id=$question_id"; $question = $mysqli->query($query)->fetch_assoc(); $query = "SELECT * FROM answers_info WHERE question_id=$question_id ORDER BY create_time DESC"; $result = $mysqli->query($query); ?> <h2 class="question-title"><?php echo $question['title']; ?></h2> <div class="question-content"><?php echo $question['content']; ?></div> <!-- 输出回答列表 --> <?php while ($row = $result->fetch_assoc()) { ?> <div class="answer-item"> <div class="answer-content"><?php echo $row['content']; ?></div> </div> <?php } ?> <!-- 输出回答表单 --> <form method="post"> <input type="hidden" name="question_id" value="<?php echo $question_id; ?>"> <div class="form-item"> <textarea name="content"></textarea> </div> <div class="form-item"> <input type="submit" name="submit" value="提交回答"> </div> </form>
Das obige ist der detaillierte Inhalt vonSo implementieren Sie ein Echtzeit-Online-Frage- und Antwortsystem über PHP und WebSocket. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!