PHP와 SignalR을 이용한 실시간 데이터 통신

王林
풀어 주다: 2023-06-28 09:58:01
원래의
1368명이 탐색했습니다.

모바일 인터넷의 급속한 발전과 함께 실시간 커뮤니케이션은 점차 매우 중요한 요구 사항이 되었습니다. 실시간 통신에서 가장 기본적인 요구 사항은 실시간 데이터 통신으로, 서버가 클라이언트에 실시간으로 데이터를 전송하고 실시간으로 상호 작용할 수 있어야 합니다.

PHP와 SignalR은 실시간 데이터 통신을 실현하는 데 있어 매우 강력한 두 가지 도구입니다. PHP는 서버측 코드를 작성하는 데 사용할 수 있는 매우 널리 사용되는 개발 언어인 반면, SignalR은 실시간 데이터 통신을 구현하는 데 사용할 수 있는 실시간 통신 프레임워크입니다.

이 기사에서는 PHP와 SignalR을 사용하여 실시간 데이터 통신을 구현하는 방법을 자세히 소개합니다. 먼저 SignalR의 기본 개념과 작동 원리를 소개한 후, PHP와 SignalR을 사용하여 실시간 데이터 통신을 위한 서버와 클라이언트를 구축하는 방법을 소개합니다. 마지막으로, PHP와 SignalR을 사용하여 실시간 데이터 통신을 구현하는 방법을 보여주는 예제를 사용하겠습니다.

1. SignalR의 기본 개념과 작동 원리

SignalR은 실시간 데이터 통신을 달성하는 데 사용할 수 있는 실시간 통신 프레임워크입니다. WebSocket, 롱 폴링, SSE(Server-Sent Events) 및 기타 기술을 기반으로 하며 다양한 브라우저 및 운영 체제에서 실시간 데이터 통신을 수행할 수 있습니다.

SignalR은 매우 간단하게 작동합니다. 클라이언트가 서버와 연결을 설정하면 SignalR은 자동으로 가장 적합한 통신 방법(WebSocket, 롱 폴링, SSE 등)을 선택하고 서버와 클라이언트 간의 지속적인 연결을 설정합니다. 서버에 클라이언트에 푸시해야 하는 새 데이터가 있으면 SignalR은 자동으로 데이터를 클라이언트에 보내고 클라이언트가 데이터를 처리할 수 있도록 클라이언트에서 해당 이벤트를 트리거합니다.

2. PHP와 SignalR을 사용하여 실시간 데이터 통신을 위한 서버와 클라이언트 구축

PHP와 SignalR을 사용하여 실시간 데이터 통신을 위한 서버와 클라이언트를 구축하려면 먼저 SignalR PHP 라이브러리를 설치해야 합니다. Composer를 사용하여 SignalR의 PHP 라이브러리를 설치할 수 있습니다. 구체적인 단계는 다음과 같습니다.

  1. Install Composer

먼저 Composer를 설치해야 합니다. Composer는 다음 명령을 사용하여 명령줄에 설치할 수 있습니다:

curl -sS https://getcomposer.org/installer | php

  1. SignalR의 PHP 라이브러리 설치

다음 명령을 사용하여 SignalR의 PHP 라이브러리를 명령줄 :

composer require signalwire/signalwire

SignalR의 PHP 라이브러리를 설치한 후 서버 및 클라이언트 코드 작성을 시작할 수 있습니다.

서버 측 코드는 다음과 같습니다.

<?php
require __DIR__ . '/vendor/autoload.php';

use SignalWireRestClient;
use SignalWireRelayStreamRoom;

$client = new Client('YOUR_PROJECT_ID', 'YOUR_AUTH_TOKEN');
$room = new Room($client, 'YOUR_ROOM_ID');

$room->on('data', function ($data) use ($room) {
    // 处理接收到的数据
});

$room->join();
로그인 후 복사

위 코드에서는 먼저 SignalR의 PHP 라이브러리를 사용하여 서버 측에 클라이언트 인스턴스를 생성합니다. 그런 다음 "data" 이벤트를 처리하는 콜백 함수를 클라이언트 인스턴스에 등록했습니다. 클라이언트가 서버에서 보낸 데이터를 받으면 콜백 함수가 자동으로 호출됩니다. 마지막으로, Join() 메서드를 호출하여 클라이언트를 SignalR 룸에 참여시킵니다.

클라이언트 측 코드는 다음과 같습니다.

<!doctype html>
<html>
<head>
    <title>SignalR Example</title>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/@signalwire/js@0.14.2/dist/signalwire.min.js"></script>
</head>
<body>

<script>
const signalwire = new window.SignalWire.WebSocketEngine({
    host: 'relay.signalwire.com',
    project: 'YOUR_PROJECT_ID',
    token: 'YOUR_AUTH_TOKEN',
    room: 'YOUR_ROOM_ID',
});

signalwire.on('ready', () => {
    // 客户端连接成功后的处理
});

signalwire.on('open', () => {
    // 客户端打开连接后的处理
});

signalwire.on('data', (data) => {
    // 处理接收到的数据
});
</script>

</body>
</html>
로그인 후 복사

위 코드에서는 먼저 SignalR의 JavaScript 라이브러리를 통해 클라이언트 측에 WebSocketEngine 인스턴스를 생성합니다. 그런 다음 WebSocketEngine 인스턴스에 일부 이벤트 콜백 함수를 등록하여 다양한 이벤트를 처리했습니다. 마지막으로 WebSocketEngine 인스턴스를 통해 서버로 데이터를 보낼 수 있습니다.

3. 예제 데모

PHP와 SignalR을 사용하여 실시간 데이터 통신을 구현하는 방법을 보여주기 위해 채팅방을 예로 들 수 있습니다. 이 채팅방에서 사용자는 클라이언트에 일부 문자 메시지를 입력할 수 있으며, 그러면 서버는 실시간 상호 작용을 위해 실시간으로 이러한 메시지를 다른 클라이언트에 푸시합니다.

구체적인 코드 구현은 다음 예를 참조하세요.

// server.php
<?php
require __DIR__ . '/vendor/autoload.php';

use SignalWireRestClient;
use SignalWireRelayStreamRoom;

$client = new Client('YOUR_PROJECT_ID', 'YOUR_AUTH_TOKEN');
$room = new Room($client, 'YOUR_ROOM_ID');

$room->on('data', function ($data) use ($room) {
    foreach ($room->clients as $client) {
        $client->send($data);
    }
});

$room->join();
로그인 후 복사
<!-- index.html -->
<!doctype html>
<html>
<head>
    <title>SignalR Example</title>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/@signalwire/js@0.14.2/dist/signalwire.min.js"></script>
</head>
<body>

<div>
    <input type="text" id="input" />
    <button id="send">Send</button>
</div>

<div id="messages"></div>

<script>
const signalwire = new window.SignalWire.WebSocketEngine({
    host: 'relay.signalwire.com',
    project: 'YOUR_PROJECT_ID',
    token: 'YOUR_AUTH_TOKEN',
    room: 'YOUR_ROOM_ID',
});

signalwire.on('ready', () => {
    console.log('Connected to the server.');
});

signalwire.on('open', () => {
    console.log('Connection opened.');
});

signalwire.on('data', (data) => {
    $('#messages').append('<p>' + data + '</p>');
});

$('#send').on('click', () => {
    const message = $('#input').val();
    signalwire.send(message);
    $('#input').val('');
});
</script>

</body>
</html>
로그인 후 복사

위 코드에서는 먼저 서버 측에 SignalR 룸을 생성합니다. 클라이언트가 서버에 연결되면 룸에 참여하게 됩니다. 클라이언트 중 하나가 메시지를 보내면 서버는 실시간 통신을 달성하기 위해 이 메시지를 다른 클라이언트에게 보냅니다.

클라이언트에서는 텍스트 입력 상자와 "보내기" 버튼을 만들었습니다. 사용자가 텍스트 입력 상자에 텍스트를 입력하고 "보내기" 버튼을 클릭하면 텍스트가 서버로 전송된 다음 서버로 전송됩니다. 실시간 통신을 위해 이 텍스트를 다른 고객에게 보냅니다.

요약

PHP와 SignalR을 사용하면 실시간 데이터 통신을 구현하는 것은 매우 쉽습니다. SignalR의 PHP 라이브러리와 JavaScript 라이브러리만 사용하면 됩니다. 실시간 데이터 통신을 구현할 때 SignalR의 룸을 통해 클라이언트 간의 연결을 구현할 수 있으며, SignalR의 이벤트 및 콜백 기능을 사용하여 서버와 클라이언트 간의 상호 작용을 처리할 수 있습니다.

위 내용은 PHP와 SignalR을 이용한 실시간 데이터 통신의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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