Dengan perkembangan teknologi Internet, semakin banyak laman web dan aplikasi telah mula menumpukan pada merealisasikan komunikasi masa nyata. Protokol WebSocket dianggap sebagai cara yang berkesan untuk mencapai komunikasi masa nyata. Artikel ini akan memperkenalkan cara menggunakan PHP dan WebSocket untuk melaksanakan fungsi komunikasi masa nyata.
WebSocket ialah protokol berasaskan TCP yang boleh mewujudkan sambungan berterusan antara penyemak imbas dan pelayan untuk mencapai komunikasi masa nyata dua hala. Tidak seperti protokol HTTP, protokol WebSocket ialah protokol dupleks penuh Ia tidak memerlukan penyemak imbas untuk menghantar permintaan untuk menerima respons pelayan, tetapi boleh berkomunikasi secara langsung dalam kedua-dua arah.
Oleh kerana WebSocket menggunakan kaedah sambungan yang panjang, ia boleh meningkatkan kecekapan penghantaran data dan mengurangkan beban pada pelayan. Dalam senario komunikasi masa nyata, WebSocket telah menjadi teknologi yang sangat diperlukan.
PHP, sebagai bahasa sebelah pelayan, juga mempunyai beberapa rangka kerja yang menyokong WebSocket. Antara yang lebih terkenal ialah rangka kerja Rachet, rangka kerja swoole, dll.
Dalam artikel ini, kami menggunakan rangka kerja Rachet untuk melaksanakan fungsi komunikasi masa nyata. Rangka kerja Rachet ialah rangka kerja sumber terbuka untuk PHP Ia menyediakan pelaksanaan bahagian pelayan WebSocket dan boleh menyokong pelbagai pelayan web, seperti Apache, Nginx, dll.
Gunakan Komposer untuk memasang rangka kerja Rachet:
composer require cboden/ratchet
Berikut ialah kod PHP mudah yang menggunakan rangka kerja Rachet untuk mencapai komunikasi masa nyata. :
<?php use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetServerIoServer; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; require 'vendor/autoload.php'; class MyChat 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 ($from !== $client) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection {$conn->resourceId} has disconnected "; } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error has occurred: {$e->getMessage()} "; $conn->close(); } } $server = IoServer::factory( new HttpServer( new WsServer( new MyChat() ) ), 8080 ); $server->run();
Dalam kod Kelas bernama MyChat ditakrifkan, yang melaksanakan antara muka MessageComponentInterface dalam rangka kerja Ratchet. Ia mengandungi 4 kaedah berikut:
onOpen()
dipanggil apabila sambungan baharu diwujudkan. onOpen()
当有新的连接建立时被调用。onMessage()
当代码接收到消息时被调用。onClose()
当连接被关闭时被调用。onError()
当出现错误时被调用。其中,onOpen()
方法记录了新连接建立的信息,onMessage()
方法将接收到的消息广播给所有连接的客户端,而onClose()
方法记录连接关闭的信息。
最后,代码通过IoServer::factory()
onMessage()
Dipanggil apabila kod menerima mesej.
onClose()
Dipanggil apabila sambungan ditutup. onError()
Dipanggil apabila ralat berlaku. onOpen()
merekodkan maklumat yang diwujudkan oleh sambungan baharu dan kaedah onMessage()
menyiarkan mesej yang diterima kepada semua sambungan, dan kaedah onClose()
merekodkan maklumat penutupan sambungan. Akhir sekali, kod menggunakan IoServer::factory()
untuk mencipta pelayan dan mendayakan pemantauan. 3. TestMulakan pelayan dalam baris arahan: php chat-server.php
Atas ialah kandungan terperinci Komunikasi masa nyata menggunakan PHP dan WebSocket. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!