Workerman을 사용하여 WebSocket 서버를 구현하는 방법
WebRTC 기술, 게임 실시간 통신, 온라인 채팅 및 기타 응용 프로그램의 인기가 높아지면서 WebSocket 기술은 점점 더 중요해졌습니다. Workerman은 PHP 환경에서 실행되는 고성능 비동기식 TCP, UDP 및 Unix 소켓 네트워크 프레임워크로, 본질적으로 높은 동시성을 지원하며 WebSocket 서버 개발에 매우 적합합니다.
이 글에서는 WebSocket 연결 처리 방법, WebSocket 메시지 송수신 방법, 프레임워크를 다른 라이브러리와 통합하는 방법 등 Workerman을 사용하여 WebSocket 서버를 구현하는 방법을 자세히 소개합니다. 기사 끝 부분에는 전체 샘플 코드도 제공됩니다.
Workerman을 사용하기 전에 먼저 Workerman을 설치해야 합니다. Composer를 통해 설치하거나 GitHub에서 직접 소스 코드를 다운로드하여 수동으로 설치할 수 있습니다. 여기에서는 Composer 설치를 예로 들어 보겠습니다.
composer require workerman/workerman
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 프로토콜을 지정해야 합니다.
이 예에서는 두 개의 콜백 함수만 정의합니다.
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 "; };
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 서버를 구현하는 것은 매우 간단하며 다른 프레임워크에 쉽게 통합될 수 있습니다.
다음은 클라이언트가 보낸 메시지를 받아 간단한 처리를 하고, 처리 결과를 클라이언트에 회신할 수 있는 전체 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!