>  기사  >  PHP 프레임워크  >  Workerman 개발: WebSocket 서버 구현 방법

Workerman 개발: WebSocket 서버 구현 방법

WBOY
WBOY원래의
2023-11-07 15:29:011373검색

Workerman 개발: WebSocket 서버 구현 방법

Workerman을 사용하여 WebSocket 서버를 구현하는 방법

WebRTC 기술, 게임 실시간 통신, 온라인 채팅 및 기타 응용 프로그램의 인기가 높아지면서 WebSocket 기술은 점점 더 중요해졌습니다. Workerman은 PHP 환경에서 실행되는 고성능 비동기식 TCP, UDP 및 Unix 소켓 네트워크 프레임워크로, 본질적으로 높은 동시성을 지원하며 WebSocket 서버 개발에 매우 ​​적합합니다.

이 글에서는 WebSocket 연결 처리 방법, WebSocket 메시지 송수신 방법, 프레임워크를 다른 라이브러리와 통합하는 방법 등 Workerman을 사용하여 WebSocket 서버를 구현하는 방법을 자세히 소개합니다. 기사 끝 부분에는 전체 샘플 코드도 제공됩니다.

  1. Workerman 설치

Workerman을 사용하기 전에 먼저 Workerman을 설치해야 합니다. Composer를 통해 설치하거나 GitHub에서 직접 소스 코드를 다운로드하여 수동으로 설치할 수 있습니다. 여기에서는 Composer 설치를 예로 들어 보겠습니다.

composer require workerman/workerman
  1. WebSocket 서버 코드 작성

Workerman을 사용하여 WebSocket 서버를 구현하기 전에 먼저 WebSocket 프로토콜이 작동하는 방식을 이해해야 합니다. WebSocket은 클라이언트와 서버가 핸드셰이크를 통해 연결을 설정한 후 서로에게 메시지를 보낼 수 있는 전이중 장기 연결 프로토콜입니다. WebSocket 메시지는 텍스트, 바이너리 또는 파일과 같은 모든 데이터일 수 있으며 서버는 메시지 유형에 따라 이를 다르게 처리할 수 있습니다.

Workerman을 사용하여 WebSocket 서버를 구현하는 것은 매우 간단하며 완료하는 데 몇 줄의 코드만 필요합니다. 예는 다음과 같습니다.

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

// 创建一个Worker监听8090端口,使用websocket协议通讯
$wsWorker = new Worker("websocket://0.0.0.0:8090");

// 启动4个进程对外提供服务
$wsWorker->count = 4;

// 处理WebSocket连接的回调函数
$wsWorker->onConnect = function($connection) {
    echo "New connection
";
};

// 处理WebSocket消息的回调函数
$wsWorker->onMessage = function($connection, $data) {
    // 处理消息...
};

// 启动Worker
Worker::runAll();

먼저 Worker 인스턴스를 생성하고 포트 8090에서 수신 대기하고 websocket 프로토콜을 사용하여 통신하도록 지정합니다. 그런 다음 4개의 프로세스를 설정하여 많은 수의 동시 연결을 처리하기 시작합니다. Worker는 TCP, UDP, Unix Socket 등 다양한 전송 프로토콜을 지원하므로 WebSocket 프로토콜을 지정해야 합니다.

이 예에서는 두 개의 콜백 함수만 정의합니다.

  1. 새 WebSocket 연결이 설정되면 onConnect 콜백 함수가 호출됩니다. 여기에서 로그를 기록하고 온라인 사용자 수 및 기타 작업을 계산할 수 있습니다.
  2. WebSocket 메시지가 수신되면 onMessage 콜백 함수가 호출됩니다. 여기서는 간단한 계산 수행, 답장 보내기 등의 메시지를 처리해야 합니다.
  3. 마지막 단계는 작업자를 시작하는 것입니다. 작업자는 지정된 포트를 수신하기 시작하고 WebSocket 연결 및 메시지를 처리합니다.
  4. WebSocket 메시지 처리

onMessage 콜백 함수를 통해 클라이언트가 보낸 WebSocket 메시지를 받을 수 있습니다. 데이터 형식은 텍스트 또는 바이너리일 수 있습니다. WebSocket 메시지를 처리하는 방법은 애플리케이션 시나리오에 따라 다릅니다. 예를 들어 온라인 채팅 애플리케이션은 브로드캐스트 및 지점 간 채팅과 같은 기능을 구현해야 하는 반면, 게임 애플리케이션은 마이크로초 수준의 실시간 통신을 구현해야 합니다.

다음은 수신된 메시지를 인쇄하고 클라이언트에 응답하는 간단한 예입니다.

$wsWorker->onMessage = function($connection, $data) {
    echo "Received message: {$data}
";
    $connection->send("Received: {$data}");
};

WebSocket 연결 상태

WebSocket 연결이 설정된 후에 클라이언트와 서버 간의 연결은 열린 상태로 유지됩니다. onClose 콜백 함수를 통해 연결 끊김 이벤트를 처리할 수 있습니다.

$wsWorker->onClose = function($connection) {
    echo "Connection closed
";
};
  1. 통합 프레임워크

Workerman은 다른 프레임워크와 쉽게 통합될 수 있습니다. 여기서는 Laravel 프레임워크를 예로 들어 Workerman을 사용하여 Laravel에서 WebSocket 서버를 구현하는 방법을 소개합니다.

먼저 Laravel 프로젝트에 Workerman을 설치해야 합니다:

composer require workerman/workerman

다음으로 WebSocket 서버를 시작하기 위한 사용자 정의 Artisan 명령을 생성할 수 있습니다:

php artisan make:command WebSocketServer

그런 다음 app/Console/Commands/WebSocketServer.php에 코드를 작성합니다. file :

<?php

namespace AppConsoleCommands;

use IlluminateConsoleCommand;
use WorkermanWorker;

class WebSocketServer extends Command {
    // 命令名称
    protected $name = 'websocket:server';

    // 命令描述
    protected $description = 'Start WebSocket server';

    // 执行命令
    public function handle() {
        // 创建Worker实例,监听8080端口
        $wsWorker = new Worker("websocket://0.0.0.0:8080");

        // 进程数量
        $wsWorker->count = 4;

        // 处理连接事件
        $wsWorker->onConnect = function($connection) {
            echo "New connection
";
        };

        // 处理消息事件
        $wsWorker->onMessage = function($connection, $data) {
            // 处理消息
        };

        // 运行Worker
        Worker::runAll();
    }
}

마지막으로 다음 명령을 사용하여 WebSocket 서버를 시작할 수 있습니다.

php artisan websocket:server

보시다시피 Workerman을 사용하여 WebSocket 서버를 구현하는 것은 매우 간단하며 다른 프레임워크에 쉽게 통합될 수 있습니다.

  1. 전체 코드 예시

다음은 클라이언트가 보낸 메시지를 받아 간단한 처리를 하고, 처리 결과를 클라이언트에 회신할 수 있는 전체 WebSocket 서버 예시입니다.

count = 4;

// 处理WebSocket连接的回调函数
$wsWorker->onConnect = function($connection) {
    echo "New connection
";
};

// 处理WebSocket消息的回调函数
$wsWorker->onMessage = function($connection, $data) {
    echo "Received message: {$data}
";
    $result = "Received: {$data}";
    $connection->send($result);
};

// 处理连接断开事件的回调函数
$wsWorker->onClose = function($connection) {
    echo "Connection closed
";
};

// 启动Worker
Worker::runAll();

위는 Workerman Through를 사용하여 구현되었습니다. 이 기사의 서문을 통해 독자는 WebSocket 서버의 전체 콘텐츠에 대한 관련 기술 지식을 마스터했으며 이러한 기술을 실제 프로젝트 개발에 사용할 수도 있다고 믿습니다.

위 내용은 Workerman 개발: WebSocket 서버 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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