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

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

Jun 13, 2023 pm 11:59 PM
websocket 고성능 swoole

최근 몇 년 동안 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으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP 및 WebSocket: 실시간 데이터 전송 모범 사례 PHP 및 WebSocket: 실시간 데이터 전송 모범 사례 Dec 18, 2023 pm 02:10 PM

PHP 및 WebSocket: 실시간 데이터 전송을 위한 모범 사례 방법 소개: 웹 애플리케이션 개발에서 실시간 데이터 전송은 매우 중요한 기술 요구 사항입니다. 기존 HTTP 프로토콜은 요청-응답 모델 프로토콜이므로 실시간 데이터 전송을 효과적으로 달성할 수 없습니다. 실시간 데이터 전송 요구를 충족하기 위해 WebSocket 프로토콜이 탄생했습니다. WebSocket은 단일 TCP 연결을 통해 전이중 통신 방법을 제공하는 전이중 통신 프로토콜입니다. H에 비해

Laravel에서 Swoole 코루틴을 사용하는 방법 Laravel에서 Swoole 코루틴을 사용하는 방법 Apr 09, 2024 pm 06:48 PM

Laravel에서 Swoole 코루틴을 사용하면 많은 수의 요청을 동시에 처리할 수 있습니다. 장점은 다음과 같습니다. 동시 처리: 여러 요청을 동시에 처리할 수 있습니다. 고성능: Linux epoll 이벤트 메커니즘을 기반으로 요청을 효율적으로 처리합니다. 낮은 리소스 소비: 더 적은 서버 리소스가 필요합니다. 간편한 통합: Laravel 프레임워크와 원활하게 통합되어 사용이 간편합니다.

SSE 및 웹소켓 SSE 및 웹소켓 Apr 17, 2024 pm 02:18 PM

이 기사에서는 데이터를 전달하는 안정적인 방법인 SSE(Server Sent Events)와 WebSocket을 비교해 보겠습니다. 통신 방향, 기본 프로토콜, 보안, 사용 용이성, 성능, 메시지 구조, 사용 용이성, 테스트 도구 등 8가지 측면에서 분석합니다. 이러한 측면을 비교하면 다음과 같이 요약됩니다. 범주 서버 전송 이벤트(SSE) WebSocket 통신 방향 단방향 양방향 기본 프로토콜 HTTP WebSocket 프로토콜 보안 HTTP와 동일 기존 보안 취약점 사용 편의성 설정 간단한 설정 복잡한 성능 빠른 메시지 전송 속도 메시지 처리 및 연결 관리에 영향을 받음 메시지 구조 일반 텍스트 또는 바이너리 사용 용이성 널리 사용 가능 WebSocket 통합에 도움이 됨

golang WebSocket 프로그래밍 팁: 동시 연결 처리 golang WebSocket 프로그래밍 팁: 동시 연결 처리 Dec 18, 2023 am 10:54 AM

Golang은 강력한 프로그래밍 언어이며 WebSocket 프로그래밍에서의 Golang 사용은 개발자들 사이에서 점점 더 가치가 높아지고 있습니다. WebSocket은 클라이언트와 서버 간의 양방향 통신을 허용하는 TCP 기반 프로토콜입니다. 이 기사에서는 Golang을 사용하여 동시에 여러 동시 연결을 처리하는 효율적인 WebSocket 서버를 작성하는 방법을 소개합니다. 기술을 소개하기 전에 먼저 WebSocket이 무엇인지 알아보겠습니다. WebSocket웹 소개

golang에서 파일 전송을 위해 WebSocket을 사용하는 방법 golang에서 파일 전송을 위해 WebSocket을 사용하는 방법 Dec 18, 2023 am 09:06 AM

golang에서 파일 전송을 위해 WebSocket을 사용하는 방법 WebSocket은 양방향 통신을 지원하고 브라우저와 서버 간에 지속적인 연결을 설정할 수 있는 네트워크 프로토콜입니다. golang에서는 타사 라이브러리 gorilla/websocket을 사용하여 WebSocket 기능을 구현할 수 있습니다. 이 기사에서는 파일 전송을 위해 golang 및 gorilla/websocket 라이브러리를 사용하는 방법을 소개합니다. 먼저 고릴라를 설치해야 합니다.

실시간 번역 기능 구현을 위한 PHP Websocket 개발 가이드 실시간 번역 기능 구현을 위한 PHP Websocket 개발 가이드 Dec 18, 2023 pm 05:52 PM

PHP 웹소켓 개발 가이드: 실시간 번역 기능 구현 소개: 인터넷이 발전하면서 다양한 애플리케이션 시나리오에서 실시간 통신이 점점 더 중요해지고 있습니다. 새롭게 떠오르는 통신 프로토콜인 Websocket은 실시간 통신을 훌륭하게 지원합니다. 이 기사에서는 PHP를 사용하여 Websocket 애플리케이션을 개발하는 방법과 실시간 번역 기능을 결합하여 특정 애플리케이션을 시연하는 방법에 대해 자세히 설명합니다. 1. 웹소켓 프로토콜이란 무엇입니까? 웹소켓 프로토콜은

스울과 워커맨 중 어느 것이 더 낫나요? 스울과 워커맨 중 어느 것이 더 낫나요? Apr 09, 2024 pm 07:00 PM

Swoole과 Workerman은 모두 고성능 PHP 서버 프레임워크입니다. 비동기 처리, 우수한 성능 및 확장성으로 잘 알려진 Swoole은 많은 수의 동시 요청과 높은 처리량을 처리해야 하는 프로젝트에 적합합니다. Workerman은 사용 편의성과 낮은 동시성 볼륨을 처리하는 프로젝트에 더 적합한 직관적인 API를 통해 비동기식 및 동기식 모드의 유연성을 제공합니다.

swoole_process를 사용하면 사용자가 어떻게 전환할 수 있나요? swoole_process를 사용하면 사용자가 어떻게 전환할 수 있나요? Apr 09, 2024 pm 06:21 PM

Swoole 프로세스를 통해 사용자는 프로세스를 생성하고 프로세스를 시작할 수 있습니다.

See all articles