Rumah >pembangunan bahagian belakang >tutorial php >Gunakan php untuk membangunkan Websocket untuk melaksanakan fungsi tolak masa nyata
Tajuk: Gunakan PHP untuk membangunkan Websocket untuk mencapai fungsi tolak masa nyata
Websocket ialah protokol komunikasi berdasarkan protokol TCP Dalam pembangunan Web, Websocket boleh digunakan untuk melaksanakan fungsi tolak masa nyata untuk mencapai masa nyata keperluan komunikasi atau masa nyata data. Dalam artikel ini, kami akan membangunkan pelayan Websocket menggunakan bahasa PHP dan menyediakan contoh kod khusus.
1. Gambaran Keseluruhan
Websocket ialah protokol komunikasi dupleks penuh Berbanding dengan protokol HTTP tradisional, Websocket lebih sesuai untuk senario komunikasi masa nyata. Ciri-ciri protokol Websocket termasuk:
2. Persediaan persekitaran pembangunan
Sebelum memulakan pembangunan, anda perlu menyediakan beberapa alatan dan persekitaran:
3. Pasang perpustakaan Websocket
Dalam PHP, terdapat banyak perpustakaan Websocket yang matang untuk dipilih, antaranya yang lebih biasa digunakan ialah Ratchet, Swoole, dll. Dalam artikel ini, kami akan menggunakan Ratchet untuk pembangunan.
composer.json
dalam direktori akar projek dan tambah kandungan berikut: composer.json
文件,并添加以下内容:{ "require": { "cboden/ratchet": "^0.4" } }
composer install
四、编写Websocket服务器代码
在创建Websocket服务器之前,我们先来讨论一下Websocket的工作流程。
send
方法发送消息,并通过onMessage
事件接收消息。下面是一个使用Ratchet库编写Websocket服务器的示例代码:
<?php use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; use RatchetServerIoServer; require 'vendor/autoload.php'; class MyWebSocket implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new SplObjectStorage(); } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "New connection: {$conn->resourceId} "; } public function onMessage(ConnectionInterface $from, $msg) { // 处理接收到的消息逻辑 foreach ($this->clients as $client) { if ($client !== $from) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection closed: {$conn->resourceId} "; } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error occurred: {$e->getMessage()} "; $conn->close(); } } $server = IoServer::factory( new HttpServer( new WsServer( new MyWebSocket() ) ), 8080 ); $server->run();
以上代码定义了一个MyWebSocket
类,实现了MessageComponentInterface
接口中的方法,用于处理连接、消息、关闭和错误事件。在onOpen
事件中,我们将新建立的连接加入到$clients
集合中;在onMessage
事件中,我们会遍历所有连接并将消息发送给其他客户端;在onClose
事件中,我们从$clients
集合中删除关闭的连接;在onError
php server.php
Buka terminal, tukar ke direktori akar projek, dan laksanakan Perintah berikut untuk memasang perpustakaan Ratchet:
New connection: 1 New connection: 2 Message received: Hello from client 1 Message received: Hello from client 2 Connection closed: 14. Tulis kod pelayan Websocket Sebelum mencipta pelayan Websocket, mari kita bincangkan aliran kerja Websocket dahulu.
Penubuhan sambungan: Pelanggan mewujudkan sambungan Websocket dengan pelayan Pelanggan menghantar permintaan HTTP, dan pelayan mengembalikan respons penukaran protokol untuk mewujudkan sambungan.
Penghantaran mesej: Kedua-dua pihak boleh menghantar mesej melalui kaedah hantar
dan menerima mesej melalui acara onMessage
.
Penutupan sambungan: Sama ada pelanggan atau pelayan menghantar bingkai rapat untuk menutup sambungan.
Berikut ialah contoh kod untuk menulis pelayan Websocket menggunakan perpustakaan Ratchet: 🎜<!DOCTYPE html> <html> <head> <title>Websocket Client</title> <script> var socket = new WebSocket("ws://localhost:8080"); socket.onopen = function() { console.log("Connected"); }; socket.onmessage = function(event) { console.log("Message received: " + event.data); }; socket.onclose = function(event) { console.log("Connection closed"); }; function sendMessage() { var message = document.getElementById("message").value; socket.send(message); } </script> </head> <body> <input type="text" id="message"> <button onclick="sendMessage()">Send</button> </body> </html>🎜Kod di atas mentakrifkan kelas
MyWebSocket
, yang melaksanakan kaedah dalam MessageComponentInterface
antara muka Gunakan Untuk mengendalikan sambungan, mesej, penutupan dan peristiwa ralat. Dalam acara onOpen
, kami menambah sambungan yang baru ditubuhkan pada koleksi $clients
dalam acara onMessage
, kami melintasi semua sambungan dan Hantar mesej kepada pelanggan lain; dalam acara onClose
, kami memadamkan sambungan tertutup daripada koleksi $clients
dalam acara onError
, Kami mengendalikan pengecualian dan tutup sambungan. 🎜🎜5 Jalankan pelayan Websocket🎜🎜Tukar ke direktori akar projek di terminal dan laksanakan arahan berikut untuk memulakan pelayan Websocket:🎜rrreee🎜Jika semuanya normal, anda akan melihat output yang serupa dengan yang berikut:🎜rrreee🎜 6. Tulis Kod pelanggan🎜🎜Akhir sekali, kami juga perlu menulis pelanggan untuk ujian. 🎜rrreee🎜Dalam contoh ini, kami menggunakan JavaScript untuk mencipta sambungan Websocket dan mencetak log yang sepadan apabila sambungan diwujudkan, mesej diterima dan sambungan ditutup. Pada halaman, kami menyediakan kotak input dan butang hantar untuk menghantar mesej. 🎜🎜7. Ringkasan🎜🎜Artikel ini memperkenalkan kaedah membangunkan pelayan Websocket menggunakan PHP, dan menyediakan contoh kod khusus untuk membantu pembaca memahami prinsip kerja dan penggunaan Websocket. Websocket mempunyai keupayaan komunikasi masa nyata dan boleh digunakan untuk melaksanakan tolak masa nyata, bilik sembang, permainan berbilang pemain dan senario lain saya harap artikel ini akan membantu anda. 🎜Atas ialah kandungan terperinci Gunakan php untuk membangunkan Websocket untuk melaksanakan fungsi tolak masa nyata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!