>백엔드 개발 >PHP 문제 >PHP를 사용하여 메시지 푸시 기능을 구현하는 방법

PHP를 사용하여 메시지 푸시 기능을 구현하는 방법

PHPz
PHPz원래의
2023-04-04 10:43:062267검색

인터넷의 급속한 발전과 함께 웹 애플리케이션의 개발이 점점 더 보편화되었습니다. 이러한 웹 애플리케이션에서 메시지 푸시 메커니즘은 중요한 부분이 되었습니다. 메시지 푸시 메커니즘을 사용하면 백엔드에서 프런트엔드로 메시지를 적극적으로 푸시할 수 있으며, 이를 통해 웹 애플리케이션의 상호 작용을 더욱 풍부하고 실시간이며 효율적으로 만들 수 있습니다.

PHP에서 메시지 푸시 메커니즘을 구현하려면 WebSocket 기술을 사용해야 합니다. WebSocket은 서버가 언제든지 클라이언트에 메시지를 보낼 수 있고 클라이언트도 서버에 메시지를 보낼 수 있도록 지속적인 연결을 설정할 수 있습니다. PHP에는 몇 가지 훌륭한 WebSocket 라이브러리를 사용할 수 있습니다. 이번 글에서는 PHP를 사용하여 메시지 푸시 기능을 구현하는 방법을 소개하겠습니다.

1. Workerman 라이브러리를 사용하여 메시지 푸시 구현

Workerman은 PHP 환경에서 실행되는 고성능 비동기 이벤트 기반 프레임워크로 유명한 PHP 프레임워크 YII의 저자인 Wang Pan이 만들었습니다. 프레임워크는 PHP 소켓 확장을 사용하여 WebSocket에 대한 지원을 구현하고 이를 기반으로 TCP/UDP 프로토콜을 처리하는 기능을 구현합니다.

이제 Workerman 라이브러리를 사용하여 메시지 푸시를 구현하는 특정 단계를 살펴보겠습니다.

  1. Workerman 라이브러리 설치

Workerman 라이브러리를 설치하려면 명령줄에서 다음 명령을 사용하세요.

composer require workerman/workerman
  1. WebSocket 만들기 server

WebSocket 서버를 만들기 전에 Workerman의 실행 환경에 자동 로딩 기능을 도입해야 합니다. 자동 로딩 기능을 도입하는 방법은 다음과 같습니다.

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

자동 로딩 기능을 도입한 후 WebSocket 서버를 인스턴스화할 수 있습니다. 코드는 다음과 같습니다.

use Workerman\Worker;
use Workerman\Lib\Timer;

$ws_worker = new Worker("websocket://0.0.0.0:2346");

//配置参数
$ws_worker->count = 4;
$ws_worker->name = 'WebSocket';

//连接事件
$ws_worker->onConnect = function($connection)
{
   echo "New connection\n";
};

//关闭事件
$ws_worker->onClose = function($connection)
{
   echo "Connection closed\n";
};

//消息事件
$ws_worker->onMessage = function($connection, $data)
{
    echo "Received: ".$data."\n";
};

Worker::runAll();

위 코드에서는 WebSocket 서버를 인스턴스화하고 수신 주소와 포트(여기에서는 포트 2346이 사용됨)를 설정합니다. 그런 다음 서버 수, 이름, 연결 이벤트, 종료 이벤트 및 메시지 이벤트를 설정합니다.

많은 수의 연결을 지원할 수 있는지 여부와 실시간 메시지 송수신 처리 속도 및 횟수는 프로세스 수와 관련이 있기 때문에 시작할 작업자 프로세스 수를 지정해야 합니다.

  1. WebSocket 서버 시작

WebSocket 서버를 생성한 후 명령줄에서 다음 명령을 사용하여 WebSocket 서버를 시작해야 합니다.

php websocket.php start

그런 다음 WebSocket 서버가 시작됩니다.

  1. 클라이언트에 메시지 푸시

WebSocket 서버가 시작된 후 클라이언트에 메시지를 푸시해야 합니다. 메시지를 푸시하는 방법은 다음과 같습니다.

foreach($ws_worker->connections as $connection)
{
    $connection->send('Welcome!');
}

위 코드에서는 서버의 모든 연결을 순회하여 해당 연결에 메시지를 보냅니다(여기서 보내는 메시지는 'Welcome!'입니다).

2. Ratchet 라이브러리를 사용하여 메시지 푸시 구현

Ratchet은 PHP를 사용하여 개발된 WebSocket 라이브러리로, 이를 통해 PHP는 실시간 양방향 통신을 수행할 수 있습니다. Ratchet은 WebSocket 서버와 WebSocket 클라이언트의 구현을 제공하며 그 기능은 매우 강력합니다.

Ratchet 라이브러리를 사용하여 메시지 푸시를 구현하는 구체적인 단계는 다음과 같습니다.

  1. Ratchet 라이브러리 설치

Ratchet 라이브러리를 설치하려면 명령줄에서 다음 명령을 사용하세요.

composer require cboden/ratchet
  1. WebSocket 서버 만들기

Workerman 라이브러리를 사용하여 메시지 푸시를 구현합니다. 마찬가지로 Ratchet 라이브러리를 사용할 때 먼저 WebSocket 서버도 생성해야 합니다. 코드는 다음과 같습니다.

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

require dirname(__DIR__) . '/vendor/autoload.php';

class Pusher implements MessageComponentInterface
{
    private $clients;
 
    public function __construct()
    {
        $this->clients = new \SplObjectStorage;
    }
 
    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})\n";
    }
 
    public function onMessage(ConnectionInterface $from, $msg)
    {
        echo "New message received! ({$from->resourceId})\n";
        $numRecv = count($this->clients) - 1;
        foreach ($this->clients as $client) 
        {
            if ($from !== $client)
            {
                $client->send($msg);
            }
        }
    }
 
    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
        echo "Connection {$conn->resourceId} has disconnected\n";
    }
 
    public function onError(ConnectionInterface $conn, \Exception $e)
    {
        echo "An error has occurred: {$e->getMessage()}\n";
        $conn->close();
    }
}
 
$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Pusher()
        )
    ),
    19920//端口号
);
$server->run();

위 코드에서는 WebSocket 서버를 구현하고 onOpen() 이벤트에서 클라이언트에 연결 상태를 출력하고, onMessage() 이벤트에서 메시지 푸시를 처리하고 연결 끊김을 다음으로 출력합니다. onClose() 이벤트 on 상태에서는 onError() 이벤트에 오류 정보가 출력됩니다.

  1. WebSocket 서버 시작

WebSocket 서버를 생성한 후 명령줄에서 다음 명령을 사용하여 WebSocket 서버를 시작해야 합니다.

php websocket.php

그런 다음 WebSocket 서버가 시작됩니다.

  1. 클라이언트에 메시지 푸시

WebSocket 서버가 시작된 후 클라이언트에 메시지를 푸시해야 합니다. 메시지를 푸시하는 방법은 다음과 같습니다.

$this->clients->remove($conn);
foreach ($this->clients as $client) 
{
    if ($from !== $client)
    {
        $msg = $from->resourceId.":".$msg;
        $client->send($msg);
    }
}

위 코드에서는 서버의 모든 연결을 순회하여 해당 연결에 메시지를 보냅니다(여기서 보내는 메시지는 'Welcome!'입니다).

Ratchet 라이브러리의 푸시 메시지는 Workerman 라이브러리의 푸시 메시지와 다릅니다. 특히 Workerman 라이브러리는 $connection->send()方法,而Ratchet库使用的是$client->send() 메서드를 사용합니다. 메시지를 푸시하는 방법도 라이브러리마다 다릅니다.

3. 요약

위는 PHP를 사용하여 메시지 푸시 메커니즘을 구현하는 구체적인 방법입니다. 이러한 방법을 통해 우리는 백엔드에서 프런트엔드로 메시지를 사전에 푸시할 수 있으므로 웹 애플리케이션과 실시간으로 효율적이고 풍부한 상호 작용을 달성할 수 있습니다. 이러한 방법을 사용할 때 각 WebSocket 라이브러리 간의 차이점과 특성에 주의하고 이를 유연하게 적용하여 더 나은 푸시 메시지를 만들어야 합니다.

위 내용은 PHP를 사용하여 메시지 푸시 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.