


Gunakan php untuk membangunkan Websocket untuk melaksanakan fungsi tolak masa nyata
Tajuk: Gunakan PHP untuk membangunkan Websocket untuk mencapai fungsi tolak masa nyata
Websocket ialah protokol komunikasi berdasarkan protokol TCP Dalam pembangunan Web, Websocket boleh digunakan untuk melaksanakan fungsi tolak masa nyata untuk mencapai masa nyata keperluan komunikasi atau masa nyata data. Dalam artikel ini, kami akan membangunkan pelayan Websocket menggunakan bahasa PHP dan menyediakan contoh kod khusus.
1. Gambaran Keseluruhan
Websocket ialah protokol komunikasi dupleks penuh Berbanding dengan protokol HTTP tradisional, Websocket lebih sesuai untuk senario komunikasi masa nyata. Ciri-ciri protokol Websocket termasuk:
- Menyokong komunikasi dupleks penuh dan boleh menghantar dan menerima data secara serentak.
- Serasi dengan protokol HTTP, menggunakan protokol jabat tangan seperti HTTP untuk pembentukan sambungan, dan boleh berkomunikasi melalui port HTTP/HTTPS.
- Data boleh dihantar pada bila-bila masa tanpa menunggu kitaran permintaan-tindak balas.
- Menyokong komunikasi merentas domain dan boleh berkomunikasi di bawah nama domain yang berbeza.
2. Persediaan persekitaran pembangunan
Sebelum memulakan pembangunan, anda perlu menyediakan beberapa alatan dan persekitaran:
- Pasang PHP: Pastikan penterjemah PHP telah dipasang pada sistem anda.
- Pasang Komposer: Komposer ialah alat pengurusan pergantungan untuk PHP Kami akan menggunakannya untuk memasang perpustakaan berkaitan Websocket.
- Pilih editor: Anda boleh memilih mana-mana editor yang anda suka untuk pembangunan, seperti Kod VS, Teks Sublime, dsb.
3. Pasang perpustakaan Websocket
Dalam PHP, terdapat banyak perpustakaan Websocket yang matang untuk dipilih, antaranya yang lebih biasa digunakan ialah Ratchet, Swoole, dll. Dalam artikel ini, kami akan menggunakan Ratchet untuk pembangunan.
- Buat fail
composer.json
dalam direktori akar projek dan tambah kandungan berikut:composer.json
文件,并添加以下内容:
{ "require": { "cboden/ratchet": "^0.4" } }
- 打开终端,切换到项目根目录,执行以下命令安装Ratchet库:
composer install
四、编写Websocket服务器代码
在创建Websocket服务器之前,我们先来讨论一下Websocket的工作流程。
- 连接建立:客户端与服务器建立Websocket连接,客户端发送一个HTTP请求,服务器返回一个协议切换的响应,建立连接。
- 消息传输:双方可以通过
send
方法发送消息,并通过onMessage
事件接收消息。 - 连接关闭:客户端或服务器端任意一方发送关闭帧来关闭连接。
下面是一个使用Ratchet库编写Websocket服务器的示例代码:
<?php use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; use RatchetServerIoServer; require 'vendor/autoload.php'; class MyWebSocket 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 ($client !== $from) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection closed: {$conn->resourceId} "; } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error occurred: {$e->getMessage()} "; $conn->close(); } } $server = IoServer::factory( new HttpServer( new WsServer( new MyWebSocket() ) ), 8080 ); $server->run();
以上代码定义了一个MyWebSocket
类,实现了MessageComponentInterface
接口中的方法,用于处理连接、消息、关闭和错误事件。在onOpen
事件中,我们将新建立的连接加入到$clients
集合中;在onMessage
事件中,我们会遍历所有连接并将消息发送给其他客户端;在onClose
事件中,我们从$clients
集合中删除关闭的连接;在onError
php server.php
Buka terminal, tukar ke direktori akar projek, dan laksanakan Perintah berikut untuk memasang perpustakaan Ratchet:
New connection: 1 New connection: 2 Message received: Hello from client 1 Message received: Hello from client 2 Connection closed: 1
Penubuhan sambungan: Pelanggan mewujudkan sambungan Websocket dengan pelayan Pelanggan menghantar permintaan HTTP, dan pelayan mengembalikan respons penukaran protokol untuk mewujudkan sambungan.
Penghantaran mesej: Kedua-dua pihak boleh menghantar mesej melalui kaedah hantar
dan menerima mesej melalui acara onMessage
.
Penutupan sambungan: Sama ada pelanggan atau pelayan menghantar bingkai rapat untuk menutup sambungan.
Berikut ialah contoh kod untuk menulis pelayan Websocket menggunakan perpustakaan Ratchet: 🎜<!DOCTYPE html> <html> <head> <title>Websocket Client</title> <script> var socket = new WebSocket("ws://localhost:8080"); socket.onopen = function() { console.log("Connected"); }; socket.onmessage = function(event) { console.log("Message received: " + event.data); }; socket.onclose = function(event) { console.log("Connection closed"); }; function sendMessage() { var message = document.getElementById("message").value; socket.send(message); } </script> </head> <body> <input type="text" id="message"> <button onclick="sendMessage()">Send</button> </body> </html>
MyWebSocket
, yang melaksanakan kaedah dalam MessageComponentInterface
antara muka Gunakan Untuk mengendalikan sambungan, mesej, penutupan dan peristiwa ralat. Dalam acara onOpen
, kami menambah sambungan yang baru ditubuhkan pada koleksi $clients
dalam acara onMessage
, kami melintasi semua sambungan dan Hantar mesej kepada pelanggan lain; dalam acara onClose
, kami memadamkan sambungan tertutup daripada koleksi $clients
dalam acara onError
, Kami mengendalikan pengecualian dan tutup sambungan. 🎜🎜5 Jalankan pelayan Websocket🎜🎜Tukar ke direktori akar projek di terminal dan laksanakan arahan berikut untuk memulakan pelayan Websocket:🎜rrreee🎜Jika semuanya normal, anda akan melihat output yang serupa dengan yang berikut:🎜rrreee🎜 6. Tulis Kod pelanggan🎜🎜Akhir sekali, kami juga perlu menulis pelanggan untuk ujian. 🎜rrreee🎜Dalam contoh ini, kami menggunakan JavaScript untuk mencipta sambungan Websocket dan mencetak log yang sepadan apabila sambungan diwujudkan, mesej diterima dan sambungan ditutup. Pada halaman, kami menyediakan kotak input dan butang hantar untuk menghantar mesej. 🎜🎜7. Ringkasan🎜🎜Artikel ini memperkenalkan kaedah membangunkan pelayan Websocket menggunakan PHP, dan menyediakan contoh kod khusus untuk membantu pembaca memahami prinsip kerja dan penggunaan Websocket. Websocket mempunyai keupayaan komunikasi masa nyata dan boleh digunakan untuk melaksanakan tolak masa nyata, bilik sembang, permainan berbilang pemain dan senario lain saya harap artikel ini akan membantu anda. 🎜Atas ialah kandungan terperinci Gunakan php untuk membangunkan Websocket untuk melaksanakan fungsi tolak masa nyata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Laravel memudahkan mengendalikan data sesi sementara menggunakan kaedah flash intuitifnya. Ini sesuai untuk memaparkan mesej ringkas, makluman, atau pemberitahuan dalam permohonan anda. Data hanya berterusan untuk permintaan seterusnya secara lalai: $ permintaan-

Pelanjutan URL Pelanggan PHP (CURL) adalah alat yang berkuasa untuk pemaju, membolehkan interaksi lancar dengan pelayan jauh dan API rehat. Dengan memanfaatkan libcurl, perpustakaan pemindahan fail multi-protokol yang dihormati, php curl memudahkan execu yang cekap

Alipay Php ...

Laravel menyediakan sintaks simulasi respons HTTP ringkas, memudahkan ujian interaksi HTTP. Pendekatan ini dengan ketara mengurangkan redundansi kod semasa membuat simulasi ujian anda lebih intuitif. Pelaksanaan asas menyediakan pelbagai jenis pintasan jenis tindak balas: Gunakan Illuminate \ Support \ Facades \ http; Http :: palsu ([ 'Google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

Adakah anda ingin memberikan penyelesaian segera, segera kepada masalah yang paling mendesak pelanggan anda? Sembang langsung membolehkan anda mempunyai perbualan masa nyata dengan pelanggan dan menyelesaikan masalah mereka dengan serta-merta. Ia membolehkan anda memberikan perkhidmatan yang lebih pantas kepada adat anda

Artikel membincangkan pengikatan statik lewat (LSB) dalam PHP, yang diperkenalkan dalam Php 5.3, yang membolehkan resolusi runtime kaedah statik memerlukan lebih banyak warisan yang fleksibel. Isu: LSB vs polimorfisme tradisional; Aplikasi Praktikal LSB dan Potensi Perfo

Artikel ini membincangkan menambah fungsi khusus kepada kerangka kerja, memberi tumpuan kepada pemahaman seni bina, mengenal pasti titik lanjutan, dan amalan terbaik untuk integrasi dan debugging.

Artikel membincangkan ciri -ciri keselamatan penting dalam rangka kerja untuk melindungi daripada kelemahan, termasuk pengesahan input, pengesahan, dan kemas kini tetap.
