>PHP 프레임워크 >ThinkPHP >ThinkPHP6에서 WebSocket 사용하기

ThinkPHP6에서 WebSocket 사용하기

王林
王林원래의
2023-06-21 12:49:393178검색

모바일 인터넷 기술의 급속한 발전으로 인스턴트 메시징과 실시간 상호 작용에 대한 사용자의 요구가 점차 증가했습니다. 웹에서 실시간 통신을 위한 중요한 프로토콜인 WebSocket 프로토콜은 전이중 통신, 실시간 푸시 및 낮은 대기 시간이라는 특성을 가지며 실시간 상호 작용 시나리오에서 선호되는 프로토콜이 되었습니다. 따라서 웹 개발에서는 WebSocket을 사용하여 실시간 통신을 구현하는 방법을 익혀야 합니다.

PHP에서는 Swoole 확장을 사용하여 WebSocket 기능을 구현할 수 있습니다. 하지만 Swoole을 배포하고 설정하는 데는 많은 시간과 노력이 필요합니다. Swoole에 익숙하지 않은 일부 개발자의 경우 학습 비용도 상대적으로 높습니다.

오늘은 ThinkPHP6에서 WebSocket을 사용하는 방법을 소개하겠습니다.

1. 확장 기능 설치

ThinkPHP6에서 WebSocket을 사용하기 전에 topthink/thinker 확장 기능을 설치해야 합니다. topthink/thinker 扩展。

composer require topthink/thinker:dev-master

topthink/thinker 是一个命令行工具,用于在 ThinkPHP6 中运行 PHP 代码和管理异步任务。

2. 配置 WebSocket

我们需要在项目的配置文件 config/socket.php 中配置 WebSocket。

<?php
return [
    // WebSocket服务器地址,使用内网穿透时填写内网地址
    'server' => '127.0.0.1:9501',

    // WebSocket的应用类,需要实现     hinkworkerServer 接口
    'worker_class' => 'appcontrollerWebSocket',
];

我们需要指定 server 的地址以及实现 Server 接口的类 worker_class,在这里我们将实现 WebSocket 功能的控制器类命名为 WebSocket,放在 appcontroller 目录下。

3. 实现 WebSocket

我们在 appcontroller 目录下创建一个名为 WebSocket 的控制器,在控制器中实现 Server 接口。

<?php
namespace appcontroller;

use thinkworkerServer;

class WebSocket implements Server
{
    protected $socket = 'websocket://127.0.0.1:9501';

    public function onMessage($connection, $data)
    {
        foreach ($this->worker->connections as $conn) {
            $conn->send('user ' . $connection->id . ' said: ' . $data);
        }
    }

    public function onConnect($connection)
    {
        echo "new connection from ip " . $connection->getRemoteIp() . "
";
    }

    public function onClose($connection)
    {
        echo "connection closed: " . $connection->id . "
";
    }

    public function onWorkerStart($worker)
    {
        // 初始化
    }
}

WebSocket 控制器类中,我们需要实现 onMessageonConnectonCloseonWorkerStart 四个方法。

  • onMessage: 当客户端发送数据时,会触发 onMessage 方法,参数 $connection 表示客户端的连接对象,$data 表示客户端发送的数据。
  • onConnect: 在客户端连接的时候会触发 onConnect 方法,参数 $connection 表示客户端的连接对象。
  • onClose: 在客户端断开连接的时候会触发 onClose 方法,参数 $connection 表示客户端的连接对象。
  • onWorkerStart: 在工作进程启动的时候会触发 onWorkerStart 方法,参数 $worker 表示当前工作进程的对象。

4. 运行 WebSocket

配置好 WebSocket 之后,我们可以使用 think 命令来启动 WebSocket。

php think worker:start

上述命令会启动一个 WebSocket 服务,并在控制台输出运行日志。

5. 测试 WebSocket

WebSocket 实现之后,我们可以使用 WebSocket 的客户端进行测试。我们可以使用 Chrome 浏览器并安装 Simple WebSocket Client 插件来进行测试。在插件中输入 WebSocket 服务器的地址,点击连接,即可开始使用 WebSocket 通信。

Simple WebSocket Clientrrreee

topthink/thinker는 ThinkPHP6에서 PHP 코드를 실행하고 비동기 작업을 관리하기 위한 명령줄 도구입니다.

2. WebSocket 구성

프로젝트 구성 파일 config/socket.php에서 WebSocket을 구성해야 합니다. 🎜rrreee🎜 server의 주소와 Server 인터페이스를 구현하는 worker_class 클래스를 지정해야 합니다. 여기서는 해당 컨트롤러 클래스의 이름을 지정합니다. WebSocket 기능을 구현합니다. 이는 WebSocket이며 appcontroller 디렉터리에 있습니다. 🎜🎜3. WebSocket 구현🎜🎜 appcontroller 디렉토리에 WebSocket이라는 컨트롤러를 생성하고 컨트롤러에 Server 인터페이스를 구현합니다. 🎜rrreee🎜 WebSocket 컨트롤러 클래스에서 onMessage, onConnect, onClose를 구현해야 합니다. onWorkerStart 네 가지 메소드. 🎜
  • onMessage: 클라이언트가 데이터를 보내면 onMessage 메서드가 트리거됩니다. $connection 매개변수는 클라이언트의 메시지를 나타냅니다. 연결 개체, $data는 클라이언트가 보낸 데이터를 나타냅니다.
  • onConnect: onConnect 메서드는 클라이언트가 연결될 때 트리거됩니다. $connection 매개변수는 클라이언트의 연결 개체를 나타냅니다. .
  • onClose: 클라이언트 연결이 끊어지면 onClose 메서드가 트리거됩니다. $connection 매개변수는 클라이언트의 연결을 나타냅니다. 물체.
  • onWorkerStart: onWorkerStart 메서드는 작업자 프로세스가 시작될 때 트리거됩니다. $worker 매개변수는 개체를 나타냅니다. 현재 작업자 프로세스.
🎜4. WebSocket 실행🎜🎜WebSocket을 구성한 후 think 명령을 사용하여 WebSocket을 시작할 수 있습니다. 🎜rrreee🎜위 명령은 WebSocket 서비스를 시작하고 콘솔에 작업 로그를 출력합니다. 🎜🎜5. WebSocket 테스트🎜🎜WebSocket이 구현된 후에는 WebSocket 클라이언트를 사용하여 테스트할 수 있습니다. 테스트를 위해 Chrome 브라우저를 사용하고 Simple WebSocket Client 플러그인을 설치할 수 있습니다. 플러그인에 WebSocket 서버의 주소를 입력하고 Connect를 클릭하면 WebSocket 통신이 시작됩니다. 🎜🎜Simple WebSocket Client에서 문자를 입력하고 전송을 클릭하면 백그라운드 콘솔에 출력 로그가 표시되어 WebSocket 통신이 정상적으로 작동하고 있음을 알 수 있습니다. 🎜🎜요약🎜🎜이 글에서는 ThinkPHP6에서 WebSocket을 사용하는 방법을 소개했습니다. WebSocket 프로토콜은 실시간 통신에 선호되는 프로토콜이며 사용 시나리오는 매우 광범위합니다. 실제 개발에서는 WebSocket을 사용하여 필요에 따라 실시간 통신 기능을 쉽게 구현하고 사용자 경험을 향상시킬 수 있습니다. 🎜

위 내용은 ThinkPHP6에서 WebSocket 사용하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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