ホームページ  >  記事  >  バックエンド開発  >  PHP と Thrift を使用したリアルタイムのデータ対話

PHP と Thrift を使用したリアルタイムのデータ対話

WBOY
WBOYオリジナル
2023-06-28 11:04:391104ブラウズ

インターネット技術の継続的な発展に伴い、リアルタイムのデータ対話はあらゆる分野でますます重要になってきています。 PHP と Thrift テクノロジーを使用してリアルタイムのデータ対話を実現することは、非常に実現可能なソリューションになりました。この記事では、PHP と Thrift を使用してリアルタイムのデータ対話を実現する方法と、簡単な例を紹介します。

1.倹約とは何ですか?

Thrift は、Facebook によって開発されたクロスランゲージ リモート プロシージャ コール (RPC) フレームワークです。 Java、PHP、Python などを含む複数のプログラミング言語をサポートしています。 Thrift は、IDL (インターフェイス定義言語) を使用してデータ型とサービス インターフェイスを定義し、コード ジェネレーターを使用してクライアントとサーバーのコードをさまざまなプログラミング言語で生成し、クライアントとサーバーが言語を超えて通信できるようにします。

Thrift の重要な特徴は、XML や JSON の代わりにバイナリ プロトコルを使用することです。これにより、Thrift はデータを効率的に送信できるようになり、ユーザーはデータ圧縮アルゴリズムをカスタマイズして送信効率を向上させることができます。

2. Thrift の使用方法は?

  1. Thrift のインストール

Thrift は次のコマンドでインストールできます:

sudo apt-get install thrift-compiler

または、公式 Web サイトからダウンロードしてインストールできます: https://thrift .apache.org/download

  1. Thrift ファイルの作成

Thrift は IDL を使用してデータ型とサービス インターフェイスを定義します。以下は、サービス インターフェイスとデータ型を含む単純な Thrift ファイルの例です。

namespace php example

struct Person {
    1: required string name,
    2: optional string email,
    3: optional bool gender,
}

service PersonService {
    bool addPerson(1: Person person),
    bool deletePerson(1: string name),
    Person getPerson(1: string name),
}

この例では、名前、電子メール、性別などの情報を含むデータ構造 person を定義します。また、個人情報の追加、削除、クエリの機能を含む PersonService サービス インターフェイスも定義しました。

  1. コードの生成

次のコマンドを実行して PHP コードを生成します:

thrift --gen php example.thrift

このコマンドは、Thrift ファイル example.thrift に基づいて PHP コードを生成します。 。

  1. サーバー側のコードの作成

サーバー側では、PersonService サービス インターフェイスを実装する必要があります。以下は、簡単な PHP コードの例です。

<?php
namespace example;

require_once 'PersonService.php';

class PersonServiceImpl implements examplePersonServiceIf {

    public function addPerson(examplePerson $person) {
        // 插入数据库等操作
        return true;
    }

    public function deletePerson($name) {
        // 从数据库中删除指定姓名的信息
        return true;
    }

    public function getPerson($name) {
        // 从数据库中查询指定姓名的信息
        return $person;
    }
}

この例では、PersonServiceIf インターフェイスを実装し、特定のビジネス ロジックに従って addperson、deleteperson、および getperson メソッドを記述します。

  1. クライアント コードの記述

クライアント側では、リモート サービスを呼び出すコードを記述する必要があります。 Thrift によって生成されたクライアント コードを使用すると、このプロセスを簡単に実装できます。以下は、単純な PHP クライアント コードの例です。

<?php
namespace example;

require_once 'PersonService.php';

// 连接服务端
$socket = new ThriftTransportTSocket('localhost', 9090);
$transport = new ThriftTransportTBufferedTransport($socket, 1024, 1024);
$protocol = new ThriftProtocolTBinaryProtocol($transport);
$client = new examplePersonServiceClient($protocol);

// 调用addPerson方法
$person = new examplePerson();
$person->name = 'Tom';
$person->email = 'tom@example.com';
$person->gender = true;
$result = $client->addPerson($person);

// 调用deletePerson方法
$name = 'Tom';
$result = $client->deletePerson($name);

// 调用getPerson方法
$name = 'Tom';
$person = $client->getPerson($name);

この例では、まず Thrift が提供する Transport クラスと Protocol クラスを使用してサーバーに接続し、クライアント オブジェクトをインスタンス化します。次に、addperson メソッド、deleteperson メソッド、getperson メソッドを呼び出して、ネットワーク送信を介したクライアントとサーバー間のリアルタイムのデータ対話を実現しました。

3. リアルタイム データ インタラクションの実現例

次は、PHP と Thrift を使用してリアルタイム データ インタラクションを実現する方法を示す簡単な例です。ユーザーがメッセージを送信でき、他のユーザーがそのメッセージを見ることができるオンライン チャット ルームがあるとします。 Thrift を使用してメッセージ構造とチャット サービス インターフェイスを定義し、PHP を使用してサーバーとクライアントを実装できます。

  1. Thrift ファイルの定義

メッセージの送信者、受信者、送信時刻、メッセージ内容などの情報を含む Message クラスを定義します。また、メッセージの送信とすべてのメッセージの取得の機能を含む ChatService サービス インターフェイスも定義しました。

namespace php example

struct Message {
    1: required string from,
    2: required string to,
    3: required i32 timestamp,
    4: required string content,
}

service ChatService {
    bool sendMessage(1: Message message),
    list<Message> getAllMessages(),
}
  1. コードの生成

次のコマンドを実行して PHP コードを生成します:

thrift --gen php example.thrift

生成されたコードには、Person.php、PersonService.php、PersonServiceClient が含まれます.php や Thrift などのファイル。

  1. サーバー側のコードを記述する

サーバー側では、ChatService サービス インターフェイスを実装する必要があります。以下は簡単な PHP コードの例です:

<?php
namespace example;

require_once 'ChatService.php';

class ChatServiceImpl implements exampleChatServiceIf {
    
    private $messages = [];

    public function sendMessage(exampleMessage $message) {
        $this->messages[] = $message;
        return true;
    }

    public function getAllMessages() {
        return $this->messages;
    }
}

この例では、ChatServiceIf インターフェイスを実装し、配列を使用して受信したすべてのメッセージを保存します。サーバーがメッセージを受信すると、それを配列に保存します。クライアントが getAllMessages メソッドを呼び出すと、保存されているすべてのメッセージが返されます。

  1. クライアント コードの記述

クライアント側では、リモート サービスを呼び出すコードを記述する必要があります。以下は、単純な PHP クライアント コードの例です。

<?php
namespace example;

require_once 'ChatService.php';

// 连接服务端
$socket = new ThriftTransportTSocket('localhost', 9090);
$transport = new ThriftTransportTBufferedTransport($socket, 1024, 1024);
$protocol = new ThriftProtocolTBinaryProtocol($transport);
$client = new exampleChatServiceClient($protocol);

// 发送消息
$message = new exampleMessage();
$message->from = 'Tom';
$message->to = 'Jerry';
$message->timestamp = time();
$message->content = 'Hello, Jerry!';
$client->sendMessage($message);

// 获取所有消息并输出
$messages = $client->getAllMessages();
foreach ($messages as $message) {
    echo "{$message->from} to {$message->to} at {$message->timestamp}: {$message->content}
";
}

この例では、最初にクライアント オブジェクトを作成し、Thrift が提供するクラスを使用してサーバーに接続します。次に、メッセージを送信し、sendMessage メソッドを呼び出し、getAllMessages メソッドを使用してすべてのメッセージを取得して出力します。

5. 結論

PHP と Thrift を使用してリアルタイムのデータ インタラクションを実現することで、言語を超えたコミュニケーションを簡単に実現でき、異なるプラットフォーム間のデータ インタラクションがより効率的かつ信頼性の高いものになります。同時に、Thrift のクロスランゲージ機能により、アプリケーションの拡張とメンテナンスがより簡単かつ柔軟になります。

以上がPHP と Thrift を使用したリアルタイムのデータ対話の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。