Home >Backend Development >PHP Tutorial >PHP Websocket development guide to implement real-time translation function

PHP Websocket development guide to implement real-time translation function

PHPz
PHPzOriginal
2023-12-18 17:52:521981browse

PHP Websocket开发指南,实现实时翻译功能

PHP Websocket Development Guide: Implementing Real-time Translation Function

Introduction:
With the development of the Internet, real-time communication becomes more and more important in various application scenarios The more important it is. As an emerging communication protocol, Websocket provides good support for real-time communication. This article will take you through a detailed understanding of how to use PHP to develop Websocket applications, and combine the real-time translation function to demonstrate its specific application.

1. What is the Websocket protocol?
The Websocket protocol is a protocol for full-duplex communication over a single TCP connection. Compared with the traditional HTTP protocol, Websocket has the following advantages:

  1. Real-time: Websocket supports two-way communication, that is, the server can actively send data to the client to achieve real-time updates.
  2. Low latency: After the Websocket protocol establishes a connection, it will not create a connection again, reducing the handshake operations in the HTTP protocol and reducing latency.
  3. Save bandwidth: The Websocket protocol uses binary frames to transmit data, which can greatly reduce network load compared to text transmission in the HTTP protocol.

2. Preparations for developing Websocket applications with PHP

  1. Installing PHP
    First, you need to ensure that PHP is installed and related extensions are enabled: sockets, pcntl ,posix.
  2. Install Composer
    Run the following command in the project directory to install:

    $ curl -sS https://getcomposer.org/installer | php
    $ mv composer.phar /usr/local/bin/composer
  3. Install the Rachet library
    Run the following command in the project directory , install the Rachet library:

    $ composer require cboden/ratchet

3. Use Rachet to implement the Websocket server

  1. Create the server.php file
    In the project root directory Create the server.php file and write the following code in the file:

    <?php
    require 'vendor/autoload.php';
    
    use RatchetMessageComponentInterface;
    use RatchetConnectionInterface;
    use RatchetServerIoServer;
    use RatchetHttpHttpServer;
    use RatchetWebSocketWsServer;
    
    class Translator implements MessageComponentInterface
    {
     protected $clients;
    
     public function __construct()
     {
         $this->clients = new SplObjectStorage;
     }
    
     public function onOpen(ConnectionInterface $conn)
     {
         $this->clients->attach($conn);
         echo "New client connected: " . $conn->resourceId . "
    ";
     }
    
     public function onMessage(ConnectionInterface $from, $msg)
     {
         // 实现翻译功能,此处省略具体代码
         $translatedMsg = translate($msg);
    
         foreach ($this->clients as $client) {
             $client->send($translatedMsg);
         }
     }
    
     public function onClose(ConnectionInterface $conn)
     {
         $this->clients->detach($conn);
         echo "Client disconnected: " . $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 Translator()
         )
     ),
     8080
    );
    
    echo "Server is running...
    ";
    $server->run();
  2. Start the Websocket server
    Run the following command in the terminal to start the Websocket server:

    $ php server.php

    In this way, the Websocket server is started successfully.

4. Implement the front-end page
Create the index.html file in the project root directory and write the following code in the file:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Websocket实时翻译</title>
</head>
<body>
    <input type="text" id="input">
    <button onclick="send()">翻译</button>
    <br>
    <div id="output"></div>

    <script>
        var conn = new WebSocket('ws://localhost:8080');

        conn.onopen = function(e) {
            console.log("Connection established!");
        };

        conn.onmessage = function(e) {
            var output = document.getElementById('output');
            output.innerHTML += '<p>' + e.data + '</p>';
        };

        function send() {
            var input = document.getElementById('input');
            conn.send(input.value);
            input.value = '';
        }
    </script>
</body>
</html>

5. Run the example

  1. Start the Websocket server
    Run the following command in the terminal to start the Websocket server:

    $ php server.php
  2. Run the front-end page
    In the browser Open the index.html file in and you will see a simple real-time translation page.
  3. Use the real-time translation function
    Enter the content to be translated in the input box, click the "Translate" button, and you can see the translation results in real time below.

Conclusion:
This article briefly introduces the basic steps of PHP Websocket development, and provides code examples combined with the real-time translation function. I hope it will be helpful for you to learn and develop Websocket applications. As a technology for realizing real-time communication, Websocket has a wide range of application prospects in real application scenarios. Readers can expand and transform this example to achieve more real-time communication functions.

The above is the detailed content of PHP Websocket development guide to implement real-time translation function. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn