>  기사  >  백엔드 개발  >  PHP 개발에서 실시간 통신을 위해 WebSocket을 사용하는 방법

PHP 개발에서 실시간 통신을 위해 WebSocket을 사용하는 방법

WBOY
WBOY원래의
2023-06-25 19:18:16841검색

인터넷의 발달로 실시간 커뮤니케이션은 우리에게 뗄래야 뗄 수 없는 일부가 되었습니다. HTTP 업그레이드 프로토콜 중 하나인 WebSocket은 TCP 프로토콜을 기반으로 하여 더욱 효율적이고 안정적입니다. PHP 개발에서 WebSocket을 사용하여 실시간 통신을 구현하는 방법은 무엇입니까? 이번 글에서는 다음과 같은 측면에서 소개하겠습니다.

WebSocket 소개

WebSocket은 TCP 프로토콜을 기반으로 통신하는 네트워크 프로토콜로 주로 실시간 통신에 사용됩니다. HTTP 프로토콜과 달리 WebSocket은 서버와 클라이언트 간의 긴 연결을 유지하고 전이중 통신을 달성하며 더 높은 데이터 전송 효율성을 가질 수 있습니다. 전통적인 HTTP 프로토콜에서는 클라이언트가 요청을 통해 서버로부터 데이터를 얻고, 서버는 요청에 응답한 후 클라이언트에게 데이터를 반환합니다. TCP 연결은 유지되어야 합니다. WebSocket에서는 핸드셰이크 중에 한 번만 연결을 설정하면 되며, 매번 연결을 설정할 필요 없이 이 연결을 기반으로 후속 데이터 전송이 가능합니다.

Swoole 확장 사용

Swoole은 PHP용으로 개발된 고성능 네트워크 통신 프레임워크로 코루틴 및 비동기 IO 작업을 지원하며 WebSocket 프로토콜도 지원합니다. WebSocket 실시간 통신을 구현하기 위해 Swoole 확장을 사용하는 과정에서는 Swoole 라이브러리에서 제공하는 WebSocket 서버 클래스를 사용해야 합니다.

Swoole 설치

# CentOS 6 系统下安装
sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
sudo rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
sudo yum install php56w php56w-opcache php56w-devel php56w-pear gcc automake autoconf make
sudo pecl install swoole

WebSocket 서버 생성

<?php
// 创建 WebSocket 服务器对象,监听 127.0.0.1:9502 端口
$server = new SwooleWebSocketServer("127.0.0.1", 9502);

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

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

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

// 启动服务器
$server->start();

위 코드에서는 먼저 수신할 WebSocket 서버 객체를 생성합니다. 그런 다음 $server->on() 메서드를 사용하여 WebSocket 연결 열기, 메시지, 연결 닫기 및 기타 이벤트를 각각 수신합니다. 클라이언트가 보낸 메시지를 받은 후 서버는 메시지 내용을 콘솔에 인쇄하고 $server->push() 메서드를 통해 메시지를 클라이언트로 다시 보냅니다. $server->on() 方法分别监听 WebSocket 的连接打开、消息以及连接关闭等事件。在收到客户端的发送的消息后,服务器会将消息内容打印到控制台中,并通过 $server->push() 方法将消息发送回客户端。

前端页面实现

创建 WebSocket 服务器后,我们需要在前端页面上编写 JavaScript 代码,创建 WebSocket 对象,并进行事件监听和消息发送等操作。具体代码如下:

// 创建 WebSocket 对象
var ws = new WebSocket("ws://127.0.0.1:9502");

// 监听 WebSocket 连接打开事件
ws.onopen = function() {
    console.log("WebSocket connection established");
};

// 监听 WebSocket 消息事件
ws.onmessage = function(event) {
    console.log("received message: " + event.data);
};

// 监听 WebSocket 连接关闭事件
ws.onclose = function() {
    console.log("WebSocket connection closed");
};

// 发送消息
ws.send("hello world");

在上述代码中,我们使用 new WebSocket("ws://127.0.0.1:9502") 创建 WebSocket 对象,并分别通过 ws.onopen()ws.onmessage()ws.onclose() 方法进行事件监听。在页面中发送消息时,可以通过 ws.send()

프런트엔드 페이지 구현

WebSocket 서버를 생성한 후에는 프런트엔드 페이지에 JavaScript 코드를 작성하고, WebSocket 개체를 생성하고, 이벤트 모니터링 및 메시지 전송을 수행해야 합니다. 구체적인 코드는 다음과 같습니다.

rrreee

위 코드에서는 new WebSocket("ws://127.0.0.1:9502")를 사용하여 WebSocket 객체를 생성하고 를 전달합니다. 이벤트 모니터링을 위한 ws.onopen( ), ws.onmessage()ws.onclose() 메서드. 페이지에서 메시지를 보낼 때 ws.send() 메서드를 통해 서버에 메시지를 보낼 수 있습니다. 🎜🎜결론🎜🎜이 기사에서는 Swoole 확장 및 프런트 엔드 페이지 구현과 관련된 PHP 개발에서 실시간 통신을 위해 WebSocket을 사용하는 방법에 대해 간략하게 소개합니다. 실제 사용에서는 특정 비즈니스 요구에 따라 조정 및 개선도 필요합니다. 이 글이 여러분에게 유용한 참고자료와 도움이 되기를 바랍니다. 🎜

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

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