Analisis prinsip pelaksanaan fungsi komunikasi masa nyata PHP
Dengan perkembangan pesat Internet, komunikasi masa nyata telah menjadi keperluan asas untuk banyak laman web dan aplikasi. Komunikasi masa nyata membolehkan pengguna menghantar dan menerima mesej serta-merta, sama ada aplikasi sembang, pengeditan kolaboratif berbilang orang atau pemberitahuan masa nyata, dsb., yang boleh meningkatkan pengalaman pengguna dengan banyak. Artikel ini akan memperkenalkan prinsip komunikasi masa nyata dalam PHP dan menyediakan contoh kod yang sepadan.
1. Prinsip pelaksanaan komunikasi masa nyata
Pengundian panjang ialah salah satu kaedah komunikasi masa nyata yang paling biasa dan mudah. Ia berdasarkan model respons permintaan HTTP Klien menghantar permintaan HTTP kepada pelayan Pelayan memastikan sambungan untuk permintaan terbuka dan mengembalikan respons dengan serta-merta apabila mesej baharu tiba. Jika pelayan tidak mempunyai mesej baharu, ia akan menunggu sehingga mesej baharu tiba atau tempoh tamat masa dicapai sebelum mengembalikan respons.
Contoh kod PHP yang melaksanakan tinjauan panjang adalah seperti berikut:
// 客户端发送请求 function longPolling() { while (true) { $newMessage = getMessage(); // 从服务器获取新消息 if ($newMessage) { return $newMessage; // 有新消息时返回 } else { // 没有新消息时继续等待 usleep(1000000); // 休眠1秒钟 } } } // 服务器返回响应 function getMessage() { // 从数据库或其他数据源获取新消息的逻辑 // ... return $newMessage; }
Dalam kod di atas, fungsi klien longPolling
menghantar permintaan kepada pelayan melalui gelung tak terhingga, dan fungsi pelayan longPolling
akan kembali serta-merta, jika tidak, ia akan terus menunggu. longPolling
通过无限循环发送请求到服务器,服务器函数getMessage
用于获取新消息。如果有新消息,函数longPolling
将立即返回,否则继续等待。
WebSocket是HTML5中新增的通信协议,它支持双向通信,可以在客户端和服务器之间建立持久连接,而不必每次都发起新的HTTP请求。WebSocket使用了类似握手的方式建立连接,一旦连接建立成功,就可以通过发送数据帧来进行实时通信。
PHP实现WebSocket的代码示例如下:
// 服务器端代码 $server = new SwooleWebSocketServer("0.0.0.0", 9501); $server->on('open', function (SwooleWebSocketServer $server, $request) { echo "new connection: {$request->fd} "; }); $server->on('message', function (SwooleWebSocketServer $server, $frame) { $message = $frame->data; // 接收到的消息 // 处理消息的逻辑 // ... $server->push($frame->fd, $response); // 向客户端发送消息 }); $server->on('close', function ($ser, $fd) { echo "connection {$fd} closed "; }); $server->start();
以上代码使用了Swoole框架来实现WebSocket的服务器端。在打开连接时,回调函数open
会被触发;在接收到消息时,回调函数message
会被触发,你可以在其中处理消息并发送响应;close
WebSocket ialah protokol komunikasi baharu dalam HTML5 Ia menyokong komunikasi dua hala dan boleh mewujudkan sambungan berterusan antara klien dan pelayan tanpa perlu memulakan HTTP baharu setiap kali. bertanya. WebSocket menggunakan kaedah seperti jabat tangan untuk mewujudkan sambungan Setelah sambungan berjaya diwujudkan, komunikasi masa nyata boleh dilakukan dengan menghantar bingkai data.
open
akan dicetuskan apabila mesej diterima, fungsi panggil balik message
akan dicetuskan, di mana anda boleh memproses mesej dan menghantar; respons; close fungsi panggil balik dicetuskan apabila sambungan ditutup. Atas ialah kandungan terperinci Analisis prinsip pelaksanaan fungsi komunikasi masa nyata PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!