WebSocket menetapkan saluran komunikasi yang berterusan, dua hala antara pelanggan (seperti penyemak imbas) dan perkhidmatan backend. Tidak seperti sifat permintaan/tindak balas HTTP, WebSockets menyokong pelbagai protokol dan membolehkan penghantaran mesej pelayan-ke-klien tanpa pengundian yang berterusan.
WebSockets mengatasi batasan komunikasi HTTP tradisional. Sebelum WebSockets, ketetapan HTTP membuat komunikasi masa nyata mencabar, kerana pelayan tidak dapat secara proaktif menolak data kepada pelanggan. WebSockets juga menawarkan kelebihan ke atas teknik yang lebih lama seperti Ajax Long Polling dan Server-Sent Events (SSE). Pengundian panjang, sambil mengurangkan latensi dengan mengekalkan sambungan terbuka, masih mengalami masa tamat yang berpotensi. Ini, bersama-sama dengan ketidakcekapan sumber banyak aplikasi Ajax, menyoroti keperluan untuk penyelesaian masa nyata yang lebih cekap-WebSockets. Mereka membolehkan teknologi "push" pelayan, menghantar data kepada pelanggan tanpa memerlukan permintaan sambungan yang telah ditetapkan.
Ratchet adalah perpustakaan PHP untuk membina aplikasi masa nyata, bi-arah, yang didorong oleh acara menggunakan WebSockets. Kami akan menggunakannya untuk membuat pelayan kami. Mengandaikan komposer dipasang, gunakan arahan ini:
Buat
), mesej (
composer require cboden/ratchet
composer.json
{
"require": {
"cboden/ratchet": "^0.4.4"
}
}
server.php
<?php
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
require __DIR__ . '/vendor/autoload.php';
class WebSocketsServer 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})\n";
}
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\n";
}
public function onError(ConnectionInterface $conn, \Exception $e) {
echo "An error has occurred: {$e->getMessage()}\n";
$conn->close();
}
}
$server = IoServer::factory(
new HttpServer(
new WsServer(
new WebSocketsServer()
)
),
8089
);
$server->run();
WebSocketsServer
), pemotongan (MessageComponentInterface
), dan ralat (onOpen
) peristiwa. Kaedah onMessage
memulakan pelayan pada port 8089. (Nota: Tutorial hilang kod klien, yang diperlukan untuk melengkapkan contoh.) onClose
Atas ialah kandungan terperinci Mula menggunakan websocket html5 hari ini dengan pelayan php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!