Klasifikasi dan analisis perbandingan kaedah pelaksanaan fungsi komunikasi masa nyata PHP
Pengenalan:
Dengan perkembangan pesat Internet, fungsi komunikasi masa nyata telah menjadi keperluan teras banyak laman web dan aplikasi. Keupayaan komunikasi masa nyata bermakna pengguna boleh menghantar, menerima dan memproses mesej dalam masa nyata. Dalam bidang PHP, terdapat banyak cara untuk melaksanakan fungsi komunikasi masa nyata Artikel ini akan mengklasifikasikan dan membandingkan kaedah ini dan memberikan contoh kod yang sepadan.
1. Kaedah komunikasi masa nyata berdasarkan sambungan panjang
Kaedah komunikasi masa nyata berdasarkan sambungan panjang membolehkan pelayan menolak mesej kepada pelanggan dalam masa nyata dengan mewujudkan sambungan berterusan. Kaedah ini biasanya dilaksanakan menggunakan Socket atau WebSocket.
Berikut ialah contoh komunikasi masa nyata Socket yang ringkas, kod sisi pelayan:
<?php // 创建socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // 绑定IP和端口 socket_bind($socket, '0.0.0.0', 8888); // 监听连接 socket_listen($socket); // 客户端连接处理 $connection = socket_accept($socket); // 循环接收和发送消息 while (true) { // 接收客户端消息 $message = socket_read($connection, 1024); echo "客户端消息:" . $message . PHP_EOL; // 发送消息给客户端 socket_write($connection, "服务器消息:收到消息了!"); } // 关闭socket连接 socket_close($socket); ?>
Kod sisi pelanggan:
<?php // 创建socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // 连接服务器 socket_connect($socket, '127.0.0.1', 8888); // 循环发送和接收消息 while (true) { // 发送消息给服务器 socket_write($socket, "客户端消息:hello"); // 接收服务器消息 $message = socket_read($socket, 1024); echo "服务器消息:" . $message . PHP_EOL; } // 关闭socket连接 socket_close($socket); ?>
Berikut ialah contoh komunikasi masa nyata WebSocket yang ringkas, kod sisi pelayan:
<?php // 创建WebSocket服务器 $server = new swoole_websocket_server("0.0.0.0", 8888); // 监听连接事件 $server->on('open', function ($server, $req) { echo "客户端连接成功! "; }); // 监听消息事件 $server->on('message', function ($server, $frame) { echo "客户端消息:" . $frame->data . " "; // 发送消息给客户端 $server->push($frame->fd, "服务器消息:收到消息了!"); }); // 监听关闭事件 $server->on('close', function ($server, $fd) { echo "客户端关闭连接! "; }); // 启动服务器 $server->start(); ?>
Kod sisi pelanggan:
<script> // 创建WebSocket连接 var socket = new WebSocket("ws://127.0.0.1:8888"); // 连接成功事件 socket.onopen = function (event) { console.log("连接服务器成功!"); }; // 接收消息事件 socket.onmessage = function (event) { console.log("服务器消息:" + event.data); // 发送消息给服务器 socket.send("客户端消息:hello"); }; // 关闭连接事件 socket.onclose = function (event) { console.log("与服务器断开连接!"); }; </script>
2. Kaedah komunikasi masa nyata berdasarkan tinjauan panjang
Kaedah komunikasi masa nyata berdasarkan pengundian panjang dijadualkan melalui klien Hantar permintaan kepada pelayan, dan pelayan akan mengembalikan respons hanya apabila mesej tiba.
Berikut ialah contoh komunikasi masa nyata tinjauan panjang berasaskan AJAX, kod sebelah pelayan:
<?php // 获取客户端发送的最新消息 $data = ''; while (empty($data)) { $data = $_POST['data']; usleep(100000); } // 返回最新消息给客户端 echo "服务器消息:收到消息了!"; ?>
Kod sebelah pelanggan:
<script> // 发送请求获取最新消息 function getData() { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { console.log("服务器消息:" + xhr.responseText); } }; xhr.open("POST", "server.php", true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send("data="); setTimeout(getData, 1000); // 每秒发送请求 } // 开始获取最新消息 getData(); </script>
3 Kaedah komunikasi masa nyata perkhidmatan Tolak
Perkhidmatan Tolak ialah sejenis komunikasi yang digunakan khusus untuk mencapai komunikasi masa nyata Perkhidmatan fungsional, seperti Pemesejan Awan Firebase (FCM), Pusher, dsb. PHP melaksanakan penyepaduan perkhidmatan tolak melalui SDK atau API yang sepadan.
Berikut ialah contoh komunikasi masa nyata Pusher yang ringkas, kod sisi pelayan:
<?php // 引入Pusher SDK require __DIR__ . '/vendor/autoload.php'; // 创建Pusher对象 $options = array( 'cluster' => 'your_cluster', 'encrypted' => true ); $pusher = new PusherPusher( 'your_app_key', 'your_app_secret', 'your_app_id', $options ); // 触发事件推送消息 $pusher->trigger('my-channel', 'my-event', array('message' => 'Hello world')); ?>
Kod sisi pelanggan:
<script src="https://js.pusher.com/7.0/pusher.min.js"></script> <script> // 创建Pusher实例 var pusher = new Pusher('your_app_key', { cluster: 'your_cluster', encrypted: true }); // 订阅频道并监听事件 var channel = pusher.subscribe('my-channel'); channel.bind('my-event', function(data) { console.log("服务器消息:" + data.message); }); </script>
Kesimpulan:
Artikel ini membincangkan kaedah komunikasi masa nyata berdasarkan sambungan panjang, komunikasi masa nyata kaedah berdasarkan tinjauan panjang, dan perkhidmatan tolak Kaedah komunikasi masa nyata diklasifikasikan dan dibandingkan, dan contoh kod yang sepadan disediakan. Mengikut keperluan dan senario khusus, memilih kaedah komunikasi masa nyata yang sesuai boleh membantu pembangun mencapai fungsi komunikasi masa nyata yang cekap dan boleh dipercayai.
Atas ialah kandungan terperinci Klasifikasi dan analisis perbandingan kaedah pelaksanaan fungsi komunikasi masa nyata PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!