>  기사  >  PHP 프레임워크  >  Swoole을 사용하여 고성능 WebSocket 서버를 구축하는 방법

Swoole을 사용하여 고성능 WebSocket 서버를 구축하는 방법

WBOY
WBOY원래의
2023-06-13 23:59:201421검색

최근 몇 년 동안 WebSocket 기술은 인터넷 개발, 특히 실시간 통신, 온라인 게임, 푸시 메시지 등의 분야에서 점점 인기를 얻고 있습니다. 고성능 비동기식 PHP 확장인 Swoole은 개발자가 고성능 WebSocket 서버를 쉽게 구축할 수 있도록 도와줍니다. 이 기사에서는 Swoole을 사용하여 고성능 WebSocket 서버를 구축하는 방법을 소개합니다.

1. Swoole 설치

Swoole은 PHP 5.3~7.4 버전을 지원하며 pecl이나 소스코드를 통해 설치할 수 있습니다. 소스 코드 설치를 예로 들어 보겠습니다.

먼저 Swoole 설치 패키지를 다운로드한 후 디렉터리에 압축을 풀고 다음 명령을 실행합니다.

phpize
./configure
make
make install

설치가 완료된 후 php.ini에 다음 구성 항목을 추가하여 활성화합니다. Swoole 확장 프로그램:

extension=swoole

설치 완료 마지막으로 php --ri swoole 명령을 사용하여 Swoole의 기본 정보를 조회합니다. php --ri swoole 命令可以查询 Swoole 的基本信息。

二、创建 WebSocket 服务器

下面我们来搭建一个简单的 WebSocket 服务器。首先在项目根目录下创建一个 server.php 文件,输入以下代码:

<?php
$server = new swoole_websocket_server("0.0.0.0", 9502);

$server->on("open", function (swoole_websocket_server $server, swoole_http_request $request) {
    echo "client {$request->fd} connected
";
});

$server->on("message", function (swoole_websocket_server $server, $frame) {
    echo "received message: {$frame->data}
";
});

$server->on("close", function (swoole_websocket_server $server, $fd) {
    echo "client {$fd} closed
";
});

$server->start();

以上代码中,我们首先创建了一个 swoole_websocket_server 实例,设置监听地址为 0.0.0.0,端口为 9502。然后分别监听了 open、message、close 三个事件,在客户端连接建立、接收到消息、连接关闭时分别触发相应的事件处理函数。

接下来在控制台运行以下命令启动 WebSocket 服务器:

php server.php

如果一切正常,可以看到类似以下输出:

2019-06-17 10:51:17|INFO|Server Start: 0.0.0.0:9502

三、测试 WebSocket 服务器

启动 WebSocket 服务器后,可以使用前端开发者常用的 WebSocket 插件工具,例如 Firefox 的 Simple WebSocket Client 插件 或 Chrome 的 WebSocket Client 插件 测试服务器是否正常工作。

以 Firefox Simple WebSocket Client 为例,打开插件后输入 ws://127.0.0.1:9502 点击 Connect 按钮即可。这时候我们会发现,在服务器端控制台输出了输出了 "client 1 connected" 日志,这说明 WebSocket 客户端已经成功连接了服务器。

我们可以在插件的发送区域输入测试内容,比如输入 "hello" 然后点击 send 按钮,就可以在控制台看到对应的 "received message: hello" 日志,说明服务器已经成功接收了 WebSocket 客户端发送的消息。

四、提高性能

在大流量场景下,WebSocket 服务器的性能是非常关键的。Swoole 提供了多种机制来提高 WebSocket 服务器的性能。

  1. 开启协程

通过在代码中调用 SwooleCoroutineun

2. WebSocket 서버 만들기

간단한 WebSocket 서버를 만들어 보겠습니다. 먼저 프로젝트 루트 디렉토리에 server.php 파일을 생성하고 다음 코드를 입력합니다:
    <?php
    use SwooleCoroutine;
    Coun(function () {
        $server = new swoole_websocket_server("0.0.0.0", 9502);
    
        $server->on("open", function (swoole_websocket_server $server, swoole_http_request $request) {
            echo "client {$request->fd} connected
    ";
        });
    
        $server->on("message", function (swoole_websocket_server $server, $frame) {
            echo "received message: {$frame->data}
    ";
        });
    
        $server->on("close", function (swoole_websocket_server $server, $fd) {
            echo "client {$fd} closed
    ";
        });
    
        $server->start();
    });
  1. 위 코드에서는 먼저 swoole_websocket_server 인스턴스를 생성하고 수신 주소를 0.0.0.0으로, 포트를 9502로 설정했습니다. 그런 다음 열기, 메시지 및 닫기의 세 가지 이벤트를 각각 모니터링하고 클라이언트 연결이 설정되고 메시지가 수신되고 연결이 닫힐 때 해당 이벤트 처리 기능이 트리거됩니다.
다음으로 콘솔에서 다음 명령을 실행하여 WebSocket 서버를 시작합니다.

$server->set([
    'worker_num' => 4,   // 工作进程数量
]);

모든 것이 정상이면 다음과 유사한 출력을 볼 수 있습니다.

$db = new SwooleCoroutineMySQL();
$db->connect([
    'host' => 'localhost',
    'port' => 3306,
    'user' => 'root',
    'password' => '',
    'database' => 'test',
]);

$res = $db->query('SELECT * FROM users WHERE id = 1');

3. WebSocket 서버 테스트
  1. WebSocket 서버를 시작한 후 를 사용하면 Firefox용 Simple WebSocket 클라이언트 플러그인 또는 Chrome용 WebSocket 클라이언트 플러그인과 같은 프런트 엔드 개발자 WebSocket 플러그인 도구가 사용하는 일반적인 도구를 사용하여 서버가 제대로 작동하는지 테스트할 수 있습니다.
Firefox Simple WebSocket Client를 예로 들어 플러그인을 연 후 ws://127.0.0.1:9502를 입력하고 연결 버튼을 클릭하세요. 이때 WebSocket 클라이언트가 서버에 성공적으로 연결되었음을 나타내는 "client 1connected" 로그가 서버 콘솔에 출력되는 것을 확인할 수 있습니다.

플러그인의 전송 영역에 테스트 내용을 입력할 수 있습니다. 예를 들어 "hello"를 입력하고 보내기 버튼을 클릭하면 콘솔에서 해당 "수신된 메시지: hello" 로그를 볼 수 있습니다. 서버가 WebSocket 클라이언트가 보낸 뉴스를 성공적으로 수신했음을 나타냅니다.

4. 성능 향상

대규모 트래픽 시나리오에서는 WebSocket 서버의 성능이 매우 중요합니다. Swoole은 WebSocket 서버의 성능을 향상시키기 위한 다양한 메커니즘을 제공합니다. 🎜
    🎜코루틴 시작🎜🎜🎜코루틴을 시작하는 코드에서 SwooleCoroutine은 함수를 호출하면 여러 코루틴을 동시에 실행하여 서버의 처리량을 향상시킬 수 있습니다. 🎜🎜예를 들어, server.php의 코드를 수정합니다: 🎜rrreee🎜🎜작업자 수 설정🎜🎜🎜서버를 시작할 때 작업자 수를 설정하여 서버의 동시 처리 기능을 향상시킬 수 있습니다. 작업자 수는 다음과 같은 방법으로 설정할 수 있습니다. 🎜rrreee🎜코루틴 아래 작업자 수는 실행 기능 내에서 설정해야 합니다. 🎜🎜🎜비동기 MySQL 사용🎜🎜🎜WebSocket 서버가 데이터베이스를 운영해야 하는 경우 Swoole의 비동기 MySQL 클라이언트를 사용하면 데이터베이스 운영으로 인한 차단을 방지하여 서버 성능을 향상시킬 수 있습니다. 🎜🎜예를 들어 Swoole 비동기 MySQL 클라이언트를 사용하여 레코드를 얻기 위한 샘플 코드는 다음과 같습니다. 🎜rrreee🎜위는 Swoole을 사용하여 고성능 WebSocket 서버를 구축하는 기본 프로세스입니다. Swoole이 제공하는 비동기 지원, 다중 프로세스, 코루틴 및 기타 장점을 사용하여 WebSocket 서버의 성능을 크게 향상시켜 애플리케이션을 더욱 안정적이고 효율적으로 만들 수 있습니다. 🎜

위 내용은 Swoole을 사용하여 고성능 WebSocket 서버를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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