


Tutorial pembangunan PHP Websocket, membina fungsi soal selidik masa nyata
Tutorial pembangunan PHP Websocket, membina fungsi soal selidik masa nyata, memerlukan contoh kod khusus
Teknologi websocket ialah protokol rangkaian baru yang boleh membina fungsi komunikasi masa nyata dalam aplikasi web. Tidak seperti protokol HTTP tradisional, protokol Websocket boleh mencapai komunikasi dua hala dan boleh menghantar dan menerima data tanpa gangguan. Dalam artikel ini, kami akan memperkenalkan cara membina fungsi tinjauan masa nyata menggunakan teknologi PHP dan Websocket, serta menyediakan contoh kod khusus.
- Pasang Ratchet pada pelayan
Ratchet ialah perpustakaan PHP untuk membangunkan aplikasi Websocket. Sebelum memulakan, anda perlu memasang Ratchet pada pelayan anda. Gunakan arahan berikut:
composer require cboden/ratchet
- Tulis kod pelayan Websocket
Pertama, kita perlu mencipta pelayan Ratchet WebSocket. Dalam contoh ini, kami akan meletakkan semua kod dalam fail PHP. Dalam fail ini, kami akan mencipta kelas yang akan melanjutkan kelas RatchetWebSocketWsServer. Dalam pembina, kami akan memulakan pembolehubah contoh $clients
yang akan menyimpan klien yang disambungkan. $clients
,该变量将存储已连接的客户端。
以下是服务器代码:
<?php require __DIR__ . '/vendor/autoload.php'; // 引入 ratchet use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetWebSocketWsServer; class PollServer implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo 'Client ' . $conn->resourceId . ' connected '; } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo 'Client ' . $conn->resourceId . ' disconnected '; } public function onMessage(ConnectionInterface $from, $msg) { echo 'Received message ' . $msg . ' from client ' . $from->resourceId . " "; // 在这里处理逻辑... } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error has occurred: {$e->getMessage()} "; $conn->close(); } } $server = new RatchetApp('localhost', 8080); // 创建一个新的 WebSocket 服务器 $server->route('/poll', new WsServer(new PollServer())); // 定义路由 $server->run(); // 启动服务器
上述代码定义了一个名为 PollServer
的类,该类实现了 RatchetMessageComponentInterface
接口。 MessageComponentInterface
接口非常简单,它只有四个方法,分别是 onOpen
、onClose
、onMessage
和 onError
。这些方法会在客户端连接到服务器时、从服务器断开连接时、接收到新消息时和遇到错误时调用。在上面的代码中,我们只是简单地输出了一些日志,但在处理实际逻辑时,你可以根据需要进行更改。
接下来,我们需要将 PollServer
类传递给 RatchetWebSocketWsServer
类的构造函数中。这将创建一个新的 WebSocket 服务器,该服务器将使用 WebSocket 协议与客户端进行通信。
最后,我们需要定义一个路由,以便客户端可以连接到服务器。在上面的代码中,我们定义了一个名为 /poll
的路由。在生产环境中,你应该为 WebSocket 服务器使用真实的域名和端口。
- 编写客户端代码
在本示例中,我们将使用 JavaScript 编写客户端代码。首先,在 HTML 文件中添加以下代码来创建一个 WebSocket 连接:
<!DOCTYPE html> <html> <head> <title>Real-time Poll</title> </head> <body> <h1>Real-time Poll</h1> <script> const connection = new WebSocket('ws://localhost:8080/poll'); // 替换为真实的域名和端口 connection.addEventListener('open', () => { console.log('Connected'); }); connection.addEventListener('message', event => { const message = JSON.parse(event.data); console.log('Received', message); }); connection.addEventListener('close', () => { console.log('Disconnected'); }); connection.addEventListener('error', error => { console.error(error); }); </script> </body> </html>
上面的代码创建了一个名为 connection
的新 WebSocket 对象,并使用 ws://localhost:8080/poll
作为服务器 URL。在生产环境中,你应该将此 URL 替换为真实的服务器域名和端口。
接下来,我们添加了几个事件侦听器,用于处理连接建立、接收消息、连接断开和错误事件。在接收到消息时,我们使用 JSON.parse
将消息解析为 JavaScript 对象,并在控制台上记录。
- 实现实时问卷调查功能
现在我们已经创建了 WebSocket 服务器和客户端,我们需要实现实时问卷调查功能。考虑以下代码示例:
public function onMessage(ConnectionInterface $from, $msg) { echo 'Received message ' . $msg . ' from client ' . $from->resourceId . " "; $data = json_decode($msg, true); switch ($data['action']) { case 'vote': $vote = $data['vote']; $this->broadcast([ 'action' => 'update', 'votes' => [ 'yes' => $this->getVoteCount('yes'), 'no' => $this->getVoteCount('no') ] ]); break; } } private function broadcast($message) { foreach ($this->clients as $client) { $client->send(json_encode($message)); } } private function getVoteCount($option) { // 在这里查询投票选项的数量... }
在上面的代码中,我们在 onMessage
方法中处理客户端发送的消息。此方法对消息进行解码,并使用 switch
语句检查 action
字段。如果 action
等于 vote
,则我们将更新投票计数并使用 broadcast
方法向所有客户端发送更新结果。
在 broadcast
方法中,我们使用一个循环遍历所有客户端并将消息发送到每个客户端。该方法将 JSON 编码的消息发送到客户端,客户端将与 connection.addEventListener('message', ...)
- Kod di atas mentakrifkan kelas bernama
PollServer
, yang melaksanakan antara mukaRatchetMessageComponentInterface
. Antara mukaMessageComponentInterface
adalah sangat mudah Ia hanya mempunyai empat kaedah, iaituonOpen
,onClose
,onMessage
danonError. Kaedah ini dipanggil apabila klien menyambung ke pelayan, apabila ia memutuskan sambungan daripada pelayan, apabila mesej baharu diterima dan apabila ralat ditemui. Dalam kod di atas, kami hanya mengeluarkan beberapa log, tetapi anda boleh mengubahnya mengikut keperluan apabila berurusan dengan logik sebenar.
<?php require __DIR__ . '/vendor/autoload.php'; use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetWebSocketWsServer; class PollServer implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo 'Client ' . $conn->resourceId . ' connected '; } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo 'Client ' . $conn->resourceId . ' disconnected '; } public function onMessage(ConnectionInterface $from, $msg) { echo 'Received message ' . $msg . ' from client ' . $from->resourceId . " "; $data = json_decode($msg, true); switch ($data['action']) { case 'vote': $vote = $data['vote']; $this->broadcast([ 'action' => 'update', 'votes' => [ 'yes' => $this->getVoteCount('yes'), 'no' => $this->getVoteCount('no') ] ]); break; } } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error has occurred: {$e->getMessage()} "; $conn->close(); } private function broadcast($message) { foreach ($this->clients as $client) { $client->send(json_encode($message)); } } private function getVoteCount($option) { // 在这里查询投票选项的数量... } } $server = new RatchetApp('localhost', 8080); $server->route('/poll', new WsServer(new PollServer())); $server->run();
PollServer
kepada pembina kelas RatchetWebSocketWsServer
. Ini akan mencipta pelayan WebSocket baharu yang akan berkomunikasi dengan klien menggunakan protokol WebSocket. Akhir sekali, kita perlu menentukan laluan supaya pelanggan boleh menyambung ke pelayan. Dalam kod di atas, kami mentakrifkan laluan bernama /poll
. Dalam persekitaran pengeluaran, anda harus menggunakan nama domain dan port sebenar untuk pelayan WebSocket. - Menulis kod sisi klien
Dalam contoh ini, kami akan menggunakan JavaScript untuk menulis kod sisi klien. Mula-mula, tambah kod berikut dalam fail HTML untuk membuat sambungan WebSocket:
<!DOCTYPE html> <html> <head> <title>Real-time Poll</title> </head> <body> <h1>Real-time Poll</h1> <form> <label><input type="radio" name="vote" value="yes"> Yes</label> <label><input type="radio" name="vote" value="no"> No</label> <button type="submit">Vote</button> </form> <ul> <li>Yes: <span id="yes-votes">0</span></li> <li>No: <span id="no-votes">0</span></li> </ul> <script> const connection = new WebSocket('ws://localhost:8080/poll'); connection.addEventListener('open', () => { console.log('Connected'); }); connection.addEventListener('message', event => { const message = JSON.parse(event.data); if (message.action === 'update') { document.getElementById('yes-votes').textContent = message.votes.yes; document.getElementById('no-votes').textContent = message.votes.no; } }); connection.addEventListener('close', () => { console.log('Disconnected'); }); connection.addEventListener('error', error => { console.error(error); }); document.querySelector('form').addEventListener('submit', event => { event.preventDefault(); const vote = document.querySelector('input[name="vote"]:checked').value; connection.send(JSON.stringify({ action: 'vote', vote: vote })); }); </script> </body> </html>
Kod di atas mencipta objek WebSocket baharu bernama connection
dan menggunakan ws://localhost: 8080/poll
sebagai URL pelayan. Dalam persekitaran pengeluaran, anda harus menggantikan URL ini dengan nama domain dan port pelayan sebenar.
- Seterusnya, kami menambah beberapa pendengar acara untuk mengendalikan penubuhan sambungan, penerimaan mesej, pemutusan sambungan dan peristiwa ralat. Apabila mesej diterima, kami menggunakan
JSON.parse
untuk menghuraikan mesej ke dalam objek JavaScript dan logkannya pada konsol. onMessage
. Kaedah ini menyahkod mesej dan menyemak medan action
menggunakan pernyataan switch
. Jika tindakan
adalah sama dengan undi
, maka kami mengemas kini kiraan undian dan menghantar kemas kini kepada semua pelanggan menggunakan kaedah siaran
. 🎜🎜Dalam kaedah connection.addEventListener('message', ...)
. Contoh Kod Penuh Borang HTML , digunakan untuk menghantar keputusan undian ke pelayan. Apabila pengguna menyerahkan borang, kami menghantar keputusan pengundian sebagai objek JSON kepada sambungan WebSocket pada pelayan. 🎜🎜Kami mengemas kini keputusan pengundian dalam HTML apabila pelanggan menerima mesej kemas kini. 🎜🎜🎜Ringkasan🎜🎜🎜Dalam artikel ini, kami memperkenalkan cara membina fungsi tinjauan masa nyata menggunakan teknologi PHP dan Websocket, dan memberikan contoh kod khusus. Teknologi websocket boleh digunakan untuk melaksanakan pelbagai fungsi komunikasi masa nyata, seperti bilik sembang, permainan, kemas kini masa nyata, dsb. Jika anda ingin mengetahui lebih lanjut tentang teknologi Websocket, kami mengesyorkan anda menyemak dokumentasi Ratchet, yang menyediakan banyak panduan dan contoh terperinci tentang pembangunan Websocket. 🎜Atas ialah kandungan terperinci Tutorial pembangunan PHP Websocket, membina fungsi soal selidik masa nyata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

CakePHP ialah rangka kerja MVC sumber terbuka. Ia menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP mempunyai beberapa perpustakaan untuk mengurangkan beban tugas yang paling biasa.

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,
