최근 몇 년 동안 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 服务器的性能。
通过在代码中调用 SwooleCoroutineun
<?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(); });
$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');
SwooleCoroutine은
함수를 호출하면 여러 코루틴을 동시에 실행하여 서버의 처리량을 향상시킬 수 있습니다. 🎜🎜예를 들어, server.php의 코드를 수정합니다: 🎜rrreee🎜🎜작업자 수 설정🎜🎜🎜서버를 시작할 때 작업자 수를 설정하여 서버의 동시 처리 기능을 향상시킬 수 있습니다. 작업자 수는 다음과 같은 방법으로 설정할 수 있습니다. 🎜rrreee🎜코루틴 아래 작업자 수는 실행 기능 내에서 설정해야 합니다. 🎜🎜🎜비동기 MySQL 사용🎜🎜🎜WebSocket 서버가 데이터베이스를 운영해야 하는 경우 Swoole의 비동기 MySQL 클라이언트를 사용하면 데이터베이스 운영으로 인한 차단을 방지하여 서버 성능을 향상시킬 수 있습니다. 🎜🎜예를 들어 Swoole 비동기 MySQL 클라이언트를 사용하여 레코드를 얻기 위한 샘플 코드는 다음과 같습니다. 🎜rrreee🎜위는 Swoole을 사용하여 고성능 WebSocket 서버를 구축하는 기본 프로세스입니다. Swoole이 제공하는 비동기 지원, 다중 프로세스, 코루틴 및 기타 장점을 사용하여 WebSocket 서버의 성능을 크게 향상시켜 애플리케이션을 더욱 안정적이고 효율적으로 만들 수 있습니다. 🎜위 내용은 Swoole을 사용하여 고성능 WebSocket 서버를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!