Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Laksanakan perkhidmatan WebSocket menggunakan PHP

Laksanakan perkhidmatan WebSocket menggunakan PHP

WBOY
WBOYasal
2023-06-22 11:41:247204semak imbas

Dengan perkembangan Internet, teknologi WebSocket semakin meluas digunakan. Teknologi WebSocket boleh merealisasikan komunikasi masa nyata dua hala dan sesuai untuk beberapa senario aplikasi seperti pemesejan segera dan permainan, serta boleh memberikan pengalaman pengguna yang lebih baik. Artikel ini akan memperkenalkan cara melaksanakan perkhidmatan WebSocket menggunakan PHP.

1. Pengenalan kepada WebSocket
WebSocket ialah protokol baharu yang dicadangkan oleh HTML5 Ia adalah protokol untuk komunikasi dupleks penuh pada satu sambungan TCP. Ia menyokong komunikasi masa nyata dan mempunyai kependaman yang lebih rendah daripada HTTP . , yang boleh menjalankan penghantaran data yang banyak. Menggunakan WebSocket boleh mencapai komunikasi masa nyata sambil mengurangkan overhed pelayan dan menjimatkan lebar jalur rangkaian.

2. Kaedah pelaksanaan WebSocket

  1. Sebelah pelayan

(1) Cipta pelayan WebSocket:

// 创建WebSocket服务器
$server = new swoole_websocket_server("0.0.0.0", 9502);

// 监听WebSocket连接事件
$server->on('open', function (swoole_websocket_server $server, $request) {
    echo "client {$request->fd} connected
";
});

// 监听WebSocket消息事件
$server->on('message', function (swoole_websocket_server $server, $frame) {
    // 处理接收到的消息
    $message = "server received message: {$frame->data}
";
    // 向WebSocket客户端发送消息
    $server->push($frame->fd, $message);
});

// 监听WebSocket关闭事件
$server->on('close', function (swoole_websocket_server $server, $fd) {
    echo "client {$fd} closed
";
});

// 启动WebSocket服务器
$server->start();

(2) Bahagian pelayan Mesej tolak:

// 向WebSocket客户端发送消息
$server->push($frame->fd, $message);
  1. Pelanggan

(1) Cipta sambungan WebSocket:

// 创建WebSocket连接
var ws = new WebSocket("ws://localhost:9502");

// 监听WebSocket连接事件
ws.onopen = function() {
    console.log("WebSocket连接已打开");
};

// 监听WebSocket消息事件
ws.onmessage = function(event) {
    console.log("WebSocket收到消息:" + event.data);
};

// 监听WebSocket关闭事件
ws.onclose = function() {
    console.log("WebSocket连接已关闭");
};

(2) Pelanggan hantar mesej:

rreee

3. Penjelasan terperinci tentang proses pelaksanaan

Di bawah ini kami akan memperkenalkan setiap bahagian blok kod di atas secara terperinci.

  1. Pelayan

(1) Cipta pelayan WebSocket:

// 向WebSocket服务器发送消息
ws.send("hello");

Kod ini mencipta pelayan WebSocket, menyatakan alamat IP sebagai 0.0.0.0 , pelabuhan ialah 9502.

(2) Dengar acara sambungan WebSocket:

// 创建WebSocket服务器
$server = new swoole_websocket_server("0.0.0.0", 9502);

Apabila klien WebSocket disambungkan, acara 'terbuka' akan dicetuskan. $request di sini ialah objek yang mengandungi beberapa maklumat tentang sambungan klien, seperti alamat IP klien, masa sambungan, dsb.

(3) Dengar acara mesej WebSocket:

// 监听WebSocket连接事件
$server->on('open', function (swoole_websocket_server $server, $request) {
    echo "client {$request->fd} connected
";
});

Apabila klien WebSocket menghantar mesej, acara 'mesej' akan dicetuskan. $frame di sini ialah objek yang mengandungi beberapa maklumat tentang mesej yang diterima, seperti kandungan mesej, masa penghantaran, dsb.

(4) Dengar acara penutupan WebSocket:

// 监听WebSocket消息事件
$server->on('message', function (swoole_websocket_server $server, $frame) {
    // 处理接收到的消息
    $message = "server received message: {$frame->data}
";
    // 向WebSocket客户端发送消息
    $server->push($frame->fd, $message);
});

Apabila klien WebSocket menutup sambungan, acara 'tutup' akan dicetuskan. $fd di sini ialah pengecam unik sambungan pelanggan.

(5) Mulakan pelayan WebSocket:

// 监听WebSocket关闭事件
$server->on('close', function (swoole_websocket_server $server, $fd) {
    echo "client {$fd} closed
";
});

Gunakan kaedah mula() untuk memulakan pelayan WebSocket untuk mula mendengar sambungan dan mesej pelanggan.

(6) Mesej tolak pelayan:

// 启动WebSocket服务器
$server->start();

Gunakan kaedah push() untuk menghantar mesej kepada klien yang ditentukan. $frame->fd ialah pengecam unik sambungan klien dan $message ialah kandungan mesej yang akan dihantar.

  1. Pelanggan

(1) Buat sambungan WebSocket:

// 向WebSocket客户端发送消息
$server->push($frame->fd, $message);

Kod ini mencipta sambungan WebSocket, menyatakan URL sebagai ws:// localhost :9502. Antaranya, ws mewakili jenis protokol, localhost mewakili alamat IP pelayan WebSocket, dan 9502 mewakili nombor port mendengar.

(2) Dengar acara sambungan WebSocket:

// 创建WebSocket连接
var ws = new WebSocket("ws://localhost:9502");

Apabila sambungan WebSocket berjaya, acara 'terbuka' akan dicetuskan. Di sini kita menggunakan kaedah console.log() untuk mengeluarkan mesej.

(3) Dengar acara mesej WebSocket:

// 监听WebSocket连接事件
ws.onopen = function() {
    console.log("WebSocket连接已打开");
};

Apabila klien WebSocket menerima mesej, acara 'mesej' akan dicetuskan. Di sini kita menggunakan kaedah console.log() untuk mengeluarkan mesej.

(4) Dengar acara penutupan WebSocket:

// 监听WebSocket消息事件
ws.onmessage = function(event) {
    console.log("WebSocket收到消息:" + event.data);
};

Apabila sambungan WebSocket ditutup, acara 'tutup' akan dicetuskan. Di sini kita menggunakan kaedah console.log() untuk mengeluarkan mesej.

(5) Pelanggan menghantar mesej:

// 监听WebSocket关闭事件
ws.onclose = function() {
    console.log("WebSocket连接已关闭");
};

Gunakan kaedah hantar() untuk menghantar mesej ke pelayan WebSocket. Di sini kami menghantar rentetan "hello".

4. Ringkasan

Artikel ini memperkenalkan cara menggunakan PHP untuk melaksanakan perkhidmatan WebSocket. Teknologi WebSocket digunakan secara meluas dalam komunikasi masa nyata, permainan dan bidang lain Ia mempunyai kependaman yang lebih rendah daripada HTTP dan boleh memberikan pengalaman pengguna yang lebih baik. Menggunakan PHP untuk melaksanakan perkhidmatan WebSocket boleh dengan cepat dan mudah mencapai komunikasi masa nyata, mengurangkan overhed pelayan dan menjimatkan lebar jalur rangkaian.

Atas ialah kandungan terperinci Laksanakan perkhidmatan WebSocket menggunakan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn