ThinkPHP6에서 실시간 통신을 위해 WebSocket을 사용하는 방법은 무엇입니까?

WBOY
풀어 주다: 2023-06-12 10:40:39
원래의
2050명이 탐색했습니다.

WebSocket은 실시간 통신을 달성하기 위해 서버와 클라이언트 간에 실시간 연결을 설정할 수 있는 전이중 통신 프로토콜입니다. 웹 개발에서 일반적으로 사용되는 PHP 프레임워크는 ThinkPHP입니다. 그러면 ThinkPHP6에서 실시간 통신을 위해 WebSocket을 어떻게 사용할 수 있을까요?

  1. Swoole 확장 설치

먼저 서버에 swoole 확장을 설치해야 합니다.

composer require swoole/swoole
로그인 후 복사

참고: swoole 확장을 사용하려면 PHP 버전 >= 7.0이 필요합니다.

  1. WebSocket 서비스 생성

ThinkPHP6에서는 사용자 정의 명령을 통해 WebSocket 서비스를 생성할 수 있습니다. 명령줄 도구를 열고 프로젝트 루트 디렉터리에 들어가서 다음 명령을 실행합니다.

php think make:command WebSocket
로그인 후 복사

명령을 실행하면 app/command 디렉터리에 WebSocket.php 파일이 생성됩니다. 이 파일에 다음 코드를 추가합니다.

<?php
namespace appcommand;

use swoole_websocket_server;
use swoole_http_request;
use thinkconsoleCommand;
use thinkconsoleInput;
use thinkconsoleOutput;

class WebSocket extends Command
{
    protected function configure()
    {
        // 给命令起一个名字
        $this->setName('swoole:websocket')
            ->setDescription('Start websocket server');
    }

    protected function execute(Input $input, Output $output)
    {
        $server = new swoole_websocket_server("0.0.0.0", 9501);

        // 监听WebSocket连接打开事件
        $server->on('open', function (swoole_websocket_server $server, swoole_http_request $request) {
            echo "connection open: {$request->fd}
";
        });

        // 监听WebSocket消息事件
        $server->on('message', function (swoole_websocket_server $server, $frame) {
            echo "received message: {$frame->data}
";

            // 广播消息给所有连接的客户端
            $server->push($frame->fd, "this is server");
        });

        // 监听WebSocket连接关闭事件
        $server->on('close', function ($ser, $fd) {
            echo "connection close: {$fd}
";
        });

        $server->start();
    }
}
로그인 후 복사

다음 명령을 실행하여 WebSocket 서비스를 시작합니다.

php think swoole:websocket
로그인 후 복사
  1. Use WebSocket in the view

뷰에서 JavaScript의 WebSocket API를 사용하여 서버와 통신할 수 있습니다. 실시간 . 예:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSocket</title>
</head>
<body>
    <script>
        var ws = new WebSocket('ws://localhost:9501');

        ws.onopen = function(){
            console.log('WebSocket open');
        };

        ws.onmessage = function(ev){
            console.log('WebSocket message: ' + ev.data);
        };

        ws.onclose = function(){
            console.log('WebSocket close');
        };
    </script>
</body>
</html>
로그인 후 복사

위 코드는 WebSocket 인스턴스를 생성하고 로컬 WebSocket 서비스에 연결합니다. 서버가 메시지를 보내면 처리를 위해 onmessage 함수가 호출됩니다. 인스턴스의 send 함수를 호출하여 서버에 메시지를 보낼 수 있습니다.

이제 WebSocket 서비스가 성공적으로 생성되어 프런트 엔드와 실시간 통신 연결이 구축되었습니다.

요약

ThinkPHP6에서는 swoole 확장 기능을 이용하여 WebSocket 실시간 통신 기능을 쉽게 구현할 수 있습니다. 사용자 정의 명령을 통해 WebSocket 서비스를 활성화하고 이를 JavaScript WebSocket API와 결합하면 웹 애플리케이션에서 실시간 통신을 달성하여 다양한 비즈니스 요구 사항을 충족할 수 있습니다.

위 내용은 ThinkPHP6에서 실시간 통신을 위해 WebSocket을 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿