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

최근 몇 년 동안 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으로 문의하세요.
SpringBoot怎么整合WebSocket实现后端向前端发送消息SpringBoot怎么整合WebSocket实现后端向前端发送消息May 11, 2023 pm 02:07 PM

一、什么是websocket接口使用websocket建立长连接,服务端和客户端可以互相通信,服务端只要有数据更新,就可以主动推给客户端。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocketAPI中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。在WebSocketAPI中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

SpringBoot怎么实现WebSocket即时通讯SpringBoot怎么实现WebSocket即时通讯May 12, 2023 am 09:13 AM

1、引入依赖org.springframework.bootspring-boot-starter-websocketorg.projectlomboklombokcom.alibabafastjson1.2.32、WebSocketConfig开启WebSocketpackagecom.shucha.deveiface.web.config;/***@authortqf*@Description*@Version1.0*@since2022-04-1215:35*/importorg.spri

Python服务器编程:实现WebSocket服务端Python服务器编程:实现WebSocket服务端Jun 19, 2023 am 09:51 AM

近年来,WebSocket技术日渐流行,成为了浏览器与服务器之间进行实时通信的标准选择。在Python中,我们可以通过一些成熟的库来实现WebSocket服务端的开发。本文将在介绍WebSocket技术的基础上,探索如何利用Python开发WebSocket服务端。一、什么是WebSocketWebSocket是一种在单个TCP

在ThinkPHP6中使用Nginx反向代理Websocket在ThinkPHP6中使用Nginx反向代理WebsocketJun 20, 2023 pm 09:31 PM

在近几年的互联网应用中,Websocket已经成为了一种非常重要的通信协议。ThinkPHP6作为一款优秀的PHP开发框架,也提供了对Websocket的支持。不过,在使用Websocket时,我们通常会涉及到跨域、负载均衡等问题,因此,在这篇文章中,我们将介绍如何在ThinkPHP6中使用Nginx反向代理Websocket。首先,我们需要明确一下Webs

SpringBoot中怎么使用WebSocket实现点对点消息SpringBoot中怎么使用WebSocket实现点对点消息May 16, 2023 pm 12:58 PM

一、添加依赖,配置使用SpringSecurity里的用户。org.springframework.bootspring-boot-starter-security我们现在需要配置用户信息和权限配置。@ConfigurationpublicclassWebSecurityConfigextendsWebSecurityConfigurerAdapter{//指定密码的加密方式@SuppressWarnings("deprecation")@BeanPasswordEncode

浏览器支持WebTransport?它能替代WebSockets?浏览器支持WebTransport?它能替代WebSockets?Feb 23, 2023 pm 03:36 PM

许多应用程序,如游戏和直播等场景,需要一种机制来尽可能快地发送消息,同时可以接受无序、不可靠的数据传输方式。本机应用程序虽然可以使用原始 UDP 套接字,但这些在 Web 上不可用,因为它们缺乏加密、拥塞控制、同意发送机制(以防止 DDoS 攻击)。

Spring Boot中使用WebSocket实现推送和通知功能Spring Boot中使用WebSocket实现推送和通知功能Jun 23, 2023 am 11:47 AM

在现代Web应用程序开发中,WebSocket是实现即时通信和实时数据传输的常用技术。SpringBoot框架提供了集成WebSocket的支持,使得开发者可以非常方便地实现推送和通知功能。本文将介绍SpringBoot中如何使用WebSocket实现推送和通知功能,并演示一个简单的实时在线聊天室的实现。创建SpringBoot项目首先,我们需要创建一

如何在Linux中使用WebSocket技术如何在Linux中使用WebSocket技术Jun 18, 2023 pm 07:38 PM

随着现代网络应用程序的增多,WebSocket技术也变得非常流行。它是一项基于TCP协议的长连接技术,可以在客户端和服务器之间创建双向通信管道。在本文中,我们将介绍如何在Linux系统中使用WebSocket技术来创建一个简单的实时聊天应用程序。一、安装Node.js要使用WebSocket,首先需要在Linux系统中安装Node.j

See all articles

핫 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를 무료로 생성하십시오.

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전