Home >Backend Development >PHP Tutorial >How to use PHP and Socket to achieve real-time data communication

How to use PHP and Socket to achieve real-time data communication

WBOY
WBOYOriginal
2023-06-28 08:15:022599browse

With the continuous development of the Internet, real-time data communication has become standard for various applications. Using PHP and Socket to implement real-time data communication is one of the common ways. This article will introduce how to use PHP and Socket to achieve real-time data communication.

Socket is a mechanism used to communicate between applications. It provides a standard set of interfaces that allow different applications to communicate between different computers. In PHP, you can use the Socket extension library to implement Socket communication.

Implementing Socket connection

To use Socket connection to achieve real-time data communication, you first need to establish a Socket connection. A Socket connection usually consists of two endpoints: the server side and the client side.

Server side:

$ip = '127.0.0.1';
$port = 8888;

$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_bind($server, $ip, $port);

socket_listen($server);

$client = socket_accept($server);

socket_close($server);

Client side:

$ip = '127.0.0.1';
$port = 8888;

$client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_connect($client, $ip, $port);

socket_close($client);

The above are the basic operations of establishing a Socket connection, in which the socket_create function is used to create a Socket object , socket_bind The function implements local binding, socket_listen The function starts to listen for connection requests from the client, and it will block until a client connects, socket_accept The function returns a new Socket object for creating a new connection. The operation of the client is also relatively simple. Use the socket_connect function to connect to the server, and use the socket_close function to close the connection.

Real-time data communication

After the Socket connection is successfully established, real-time data communication can begin. In a Socket connection, data is transferred via streams. The server can receive data from the client through the socket_recv function, and the client can send data to the server through the socket_send function.

Server side:

$ip = '127.0.0.1';
$port = 8888;

$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_bind($server, $ip, $port);

socket_listen($server);

$client = socket_accept($server);

while(true){
    $message = socket_recv($client, 1024, MSG_WAITALL);

    if($message === false){
        socket_close($client);
        break;
    }

    echo "收到消息: $message 
";
}

socket_close($server);

Client side:

$ip = '127.0.0.1';
$port = 8888;

$client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_connect($client, $ip, $port);

$message = "Hello World!";
socket_send($client, $message, strlen($message), 0);

socket_close($client);

The above are the basic operations of sending and receiving messages. The server side solves the problem of only receiving one message at a time through looping. Disadvantages. This method of real-time data communication is simple and efficient to use, and is very beneficial if used properly.

Use WebSocket to achieve real-time data communication

WebSocket is a protocol based on the HTTP protocol that can create a persistent connection between the browser and the server. In PHP, you can use third-party libraries such as Ratchet to implement WebSocket communication.

Implement WebSocket connection

Server code:

require __DIR__ . '/vendor/autoload.php';

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class WebSocketServer implements MessageComponentInterface {
    protected $clients;

    public function __construct() {
        $this->clients = new SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "有新的客户端连接:{$conn->resourceId}
";
    }

    public function onMessage(ConnectionInterface $from, $message) {
        foreach ($this->clients as $client) {
            if ($from !== $client) {
                $client->send($message);
            }
        }
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "客户端离开:{$conn->resourceId}
";
    }

    public function onError(ConnectionInterface $conn, Exception $e) {
        echo "发生错误:{$e->getMessage()}
";
        $conn->close();
    }

    public function run() {
        $server = RatchetServerIoServer::factory(
            new RatchetHttpHttpServer(
                new RatchetWebSocketWsServer(
                    $this
                )
            ),
            8080
        );

        echo "WebSocket服务已启动...
";

        $server->run();
    }
}

$server = new WebSocketServer();
$server->run();

The above is a simple WebSocket Server, using MessageComponentInterface to implement four basic methods, respectively It is onOpen, onMessage, onClose, onError. The resource ID of the new client is added in the onOpen method to identify the client when it leaves, the received message is broadcast in the onMessage method, onClose The offline client is removed from the client list in the method, and the connection error with the client is handled in the onError method.

Client code:

var socket = new WebSocket('ws://' + window.location.host + ':8080');

socket.onopen = function() {
    console.log('WebSocket已打开');
};

socket.onerror = function() {
    console.log('WebSocket出错');
};

socket.onmessage = function(event) {
    console.log('收到消息:' + event.data);
};

socket.onclose = function() {
    console.log('WebSocket已关闭');
};

The above is the client code, which uses the WebSocket object to create a WebSocket connection and handles onopen, onerror, onmessage respectively. , onclose event. The received message is printed in the onmessage method.

WebSocket allows for easier real-time communication between the browser and server than traditional Socket. Using third-party libraries such as Ratchet to implement WebSocket communication can reduce development complexity.

Conclusion

Through the above introduction, we can see that using PHP and Socket to achieve real-time data communication is relatively more flexible and can be applied to various application scenarios. At the same time, WebSocket communication using third-party libraries such as Ratchet is easier to get started than traditional Socket communication implemented on the browser and server side, and can accelerate communication development in a shorter time. Developers can choose the appropriate communication method according to their own needs.

The above is the detailed content of How to use PHP and Socket to achieve real-time data communication. 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