


How to achieve real-time communication using PHP and WebSocket
With the continuous development of Internet technology, real-time communication has become an indispensable part of daily life. Efficient, low-latency real-time communication can be achieved using WebSockets technology, and PHP, as one of the most widely used development languages in the Internet field, also provides corresponding WebSocket support. This article will introduce how to use PHP and WebSocket to achieve real-time communication, and provide specific code examples.
1. What is WebSocket
WebSocket is a protocol for full-duplex communication on a single TCP connection. Different from the HTTP protocol, after the WebSocket connection is established, data can be exchanged directly between the server and the client without the need to interact through HTTP requests and responses. This enables WebSocket to achieve low-latency, high-efficiency real-time communication, and is suitable for online games, chat rooms and other scenarios that require high concurrency and real-time interaction.
2. How PHP supports WebSocket
PHP provides some libraries and frameworks to implement WebSocket, such as Ratchet, Wrench, etc. These libraries and frameworks are implemented based on the PHP extension Swoole. Swoole is a high-performance network communication framework for PHP that supports asynchronous IO, coroutine and other features. It is suitable for building high-concurrency, high-performance web servers, game servers and other applications.
In this article, we will use the Ratchet library to implement WebSocket. Ratchet provides an implementation of the standards-based RFC6455 WebSocket protocol and has the characteristics of ease of use, flexibility, and high scalability. At the same time, Ratchet also supports WebSockets sub-protocols, such as STOMP, WAMP, etc., and provides complete documentation and sample code to facilitate developers to get started quickly.
3. Sample code to achieve real-time communication
Below we use a simple chat room application to demonstrate how to use PHP and WebSocket to achieve real-time communication.
- Install Ratchet
Install Ratchet locally or on the server side, you can install it through Composer:
composer require cboden/ratchet
- Write WebSocket server
Create a PHP file server.php with the following code:
<?php require dirname(__DIR__) . '/vendor/autoload.php'; use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetWebSocketMessageComponentTrait; class Chat implements MessageComponentInterface { use MessageComponentTrait; 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 onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection {$conn->resourceId} has disconnected "; } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error has occurred: {$e->getMessage()} "; $conn->close(); } public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { if ($from !== $client) { $client->send($msg); } } } } $server = new RatchetWebSocketWsServer(new Chat()); $loop = ReactEventLoopFactory::create(); $socket = new ReactSocketServer('0.0.0.0:8080', $loop); $server = new RatchetServerIoServer($server, $socket, $loop); echo "Server started "; $server->run();
The above code creates a simple chat room server, listening on port 8080 and waiting for client connections. When the client connects, the onOpen method is called and the client connection object is saved to an ObjectStorage object. When the client sends a message, the onMessage method is called to send the message to all clients connected to the server. When the client disconnects, the onClose method will be called to delete the client connection object from the ObjectStorage object.
- Writing WebSocket client
Create an HTML file client.html with the following code:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Chat Room</title> <style> #messages { margin-bottom: 10px; padding: 5px; border: 1px solid #ddd; overflow-y: scroll; height: 200px; } </style> </head> <body> <div> <input type="text" id="input-message" placeholder="Write a message..."> <button id="btn-send">Send</button> </div> <div id="messages"></div> <script> var conn = new WebSocket('ws://localhost:8080'); var messages = document.getElementById('messages'); var inputMessage = document.getElementById('input-message'); var btnSend = document.getElementById('btn-send'); conn.onopen = function(e) { messages.innerHTML += '<div>Connected to server</div>' }; conn.onmessage = function(e) { messages.innerHTML += '<div>' + e.data + '</div>' }; conn.onerror = function(e) { console.log('An error occurred: ' + e.data); }; conn.onclose = function(e) { messages.innerHTML += '<div>Connection closed</div>' }; btnSend.onclick = function() { if (inputMessage.value) { conn.send(inputMessage.value); inputMessage.value = ''; } }; inputMessage.addEventListener('keydown', function(e) { if (e.keyCode === 13 && inputMessage.value.trim()) { conn.send(inputMessage.value); inputMessage.value = ''; } }); </script> </body> </html>
The above code creates a simple chat room The client establishes a connection with the server through WebSocket and listens to the server's messages. When the user enters a message in the text box and clicks the send button or presses the enter key, the message is sent to the server and displayed in the chat window.
- Run the WebSocket server and client
Start the WebSocket server in the terminal:
php server.php
Open the client page client.html in the web browser , enter your message and send, you will see the message is sent to the server and other clients connected to the server will receive the same message. In this way, we successfully implemented real-time communication using PHP and WebSocket.
4. Summary
As an efficient and low-latency real-time communication protocol, WebSocket provides us with a new way of real-time interaction. At the same time, PHP provides a wealth of WebSocket support libraries and frameworks, allowing us to easily build efficient, fast, and stable WebSocket applications. I hope this article can help you better understand and use WebSocket technology and implement more real-time communication applications.
The above is the detailed content of How to achieve real-time communication using PHP and WebSocket. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
