ホームページ PHPフレームワーク Laravel Laravelインスタントアプリケーションの実装方法

Laravelインスタントアプリケーションの実装方法

Oct 21, 2019 pm 01:29 PM
laravel

インスタント インタラクティブ アプリケーション

最新の Web アプリケーションでは、最も一般的な支払いコールバックやサードパーティのログインなど、多くのシナリオでインスタント メッセージングの使用が必要です。これらのビジネス シナリオは、基本的に次のプロセスに従う必要があります。

# クライアントは関連ビジネスをトリガーし、サードパーティ アプリケーションの操作 (支払いなど) を生成します

# クライアントはサーバーの応答結果を待ちます(ユーザー 他社アプリの操作完了)

# 他社アプリがサーバーに処理結果を通知(決済完了)

# サーバーがクライアントに通知処理結果

# クライアントベース 結果についてのフィードバック (支払い成功ページにジャンプ)

#以前は、この種のインスタント メッセージングを実現し、クライアントが正しく応答できるようにするために処理結果に関して、最も一般的に使用されるテクノロジはポーリングでした。これは、シングルステップの HTTP プロトコルの方向性により、クライアントがサーバーに処理結果を何度も能動的に要求することしかできないためです。この方法には明らかな欠点があり、サーバー側のリソースを占有するだけでなく、サーバー側の処理結果をリアルタイムに取得することができません。

WebSocket プロトコルを使用して、リアルタイム インタラクションを処理できるようになりました。これは、サーバーがクライアントに情報をアクティブにプッシュできる双方向プロトコルです。この記事では、Laravel の強力なイベント システムを使用してリアルタイム インタラクションを構築します。次の知識が必要です:

#● Laravel Event

##● Redis

##● Socket.io

##● Node.js

#Redis

始める前に、Redis サービスを開き、Laravel アプリケーションでそれを構成して有効にする必要があります。プロセス全体を通じて、Redis のサブスクリプションおよび公開メカニズムを使用する必要があるためです。インスタントメッセージングを有効にします。

Redis は、オープンソースの効率的なキー/値ストレージ システムです。通常、キーと値のペアを保存するデータ構造サーバーとして使用され、文字列、ハッシュ、リスト、セット、および順序付けされた組み合わせをサポートできます。 Laravel で Redis を使用するには、Composer を通じて predis/predis パッケージ ファイルをインストールする必要があります。

Configuration

アプリケーション内の Redis の設定ファイルは config/database.php に保存されており、このファイル内に Redis サービス情報を含むファイルが表示されます。 redis array:

'redis' => [
  'cluster' => false,
  'default' => [
    'host' => '127.0.0.1',
    'port' => 6379,
    'database' => 0,
  ],
]
ログイン後にコピー

redis サービスのポートを変更する場合は、構成ファイル内のポートの一貫性を保ってください。

Laravel イベント

ここでは、Laravel の強力なイベント ブロードキャスト機能を使用する必要があります:

Broadcast Event

多くの最新のアプリケーションは、Web Sockets を使用してリアルタイムの対話型ユーザー インターフェイスを実装しています。サーバー上で一部のデータが変更されると、WebSocket 接続を介してメッセージがクライアントに配信され、処理されます。

このタイプのアプリケーションの構築を支援します。 Laravel を使用すると、WebSocket 接続経由でイベントを簡単にブロードキャストできます。 Laravel を使用すると、イベントをブロードキャストして、サーバー側およびクライアント側の JavaScript フレームワークにイベント名を共有できます。

設定

すべてのイベント ブロードキャスト設定オプションは、config/broadcasting.php 設定ファイルに保存されます。 Laravel には、Pusher、Redis、Log などの利用可能なドライバーがいくつか付属していますが、ここでは Redis をブロードキャスト ドライバーとして使用します。これには、predis/predis クラス ライブラリが必要です。

デフォルトのブロードキャスト ドライバーはプッシャーを使用するため、.env ファイルで BROADCAST_DRIVER=redis を設定する必要があります。 ユーザーが WeChat ログインをスキャンした後にブロードキャストする WechatLoginedEvent イベント クラスを作成します。

<?php
namespace App\Events;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class WechatLoginedEvent extends Event implements ShouldBroadcast
{
    use SerializesModels;
    public $token;
    protected $channel;
    /**
     * Create a new event instance.
     *
     * @param  string $token
     * @param  string $channel
     * @return void
     */
    public function __construct($token, $channel)
    {
        $this->token = $token;
        $this->channel = $channel;
    }
    /**
     * Get the channels the event should be broadcast on.
     *
     * @return array
     */
    public function broadcastOn()
    {
        return [$this->channel];
    }
    /**
     * Get the name the event should be broadcast on.
     *
     * @return string
     */
    public function broadcastAs()
    {
        return &#39;wechat.login&#39;;
    }
}
ログイン後にコピー

broadcastOn メソッドは、ブロードキャストされるチャネルを表す配列を返す必要があることに注意する必要があります。 BroadcastingAs は、ブロードキャストによってトリガーされたイベントを表す文字列を返します。Laravel のデフォルトでは、イベント クラスの完全なクラス名が返されます。ここでは、App\Events\WechatLoginedEvent です。

最も重要なことは、次のことが必要であることです。このクラスに ShouldBroadcast コントラクトを実装させます。 Laravel はイベント生成時にこの名前空間を自動的に追加しており、このコントラクトはブロードキャストオン メソッドのみを制約します。

イベントが完了したら、次のステップはイベントをトリガーすることです。単純なコード行で十分です:

event(new WechatLoginedEvent($token, $channel));
ログイン後にコピー

この操作は自動的にイベントの実行をトリガーし、情報をブロードキャストします。 。基礎となるブロードキャスト操作は、redis のサブスクリプションおよび公開メカニズムに依存します。 RedisBroadcaster は、指定されたチャネルを通じてイベント内の一般にアクセス可能なデータを公開します。公開されたデータをより詳細に制御したい場合は、broadcastWith メソッドをイベントに追加すると、配列

/**
 * Get the data to broadcast.
 *
 * @return array
 */
 public function broadcastWith() 
 {
   return [&#39;user&#39; => $this->user->id];
 }
ログイン後にコピー

#Node.js および Socket.io

## が返されます。

#公開された情報については、Redis パブリケーションをサブスクライブし、WebSocket プロトコルを使用して情報を転送できるように接続するサービスが必要です。ここでは、Node.js とソケット.io を借用できます。これは非常に便利です。このサービスを構築します:

// server.js
var app = require(&#39;http&#39;).createServer(handler);
var io = require(&#39;socket.io&#39;)(app);
var Redis = require(&#39;ioredis&#39;);
var redis = new Redis();
app.listen(6001, function () {
  console.log(&#39;Server is running!&#39;) ;
});
function handler(req, res) {
  res.writeHead(200);
  res.end(&#39;&#39;);
}
io.on(&#39;connection&#39;, function (socket) {
  socket.on(&#39;message&#39;, function (message) {
    console.log(message)
  })
  socket.on(&#39;disconnect&#39;, function () {
    console.log(&#39;user disconnect&#39;)
  })
});
redis.psubscribe(&#39;*&#39;, function (err, count) {
});
redis.on(&#39;pmessage&#39;, function (subscrbed, channel, message) {
  message = JSON.parse(message);
  io.emit(channel + &#39;:&#39; + message.event, message.data);
});
ログイン後にコピー

ここでは、Node.js を使用して、socket.io サーバーを導入し、6001 ポートをリッスンします。redis の psubscribe コマンドを借用して、ワイルドカードを使用してバッチで迅速にサブスクライブします。メッセージがトリガーされ、メッセージは WebSocket 経由で転送されます。

Socket.io クライアント

Web フロントエンドでは、サーバー ポート 6001 との通信を開始し、チャネルにサブスクライブするために、Socket.io クライアントを導入する必要があります。 events:

// client.js
let io = require(&#39;socket.io-client&#39;)
var socket = io(&#39;:6001&#39;)
      socket.on($channel + &#39;:wechat.login&#39;, (data) => {
        socket.close()
        // save user token and redirect to dashboard
})
ログイン後にコピー

閉じた通信ループ全体が終了し、開発プロセスは次のようになります:

# ブロードキャスト通知をサポートする Laravel でイベントを構築する

#● ブロードキャストする必要があるチャネルとイベント名を設定する

#● Redis ドライバーを使用するようにブロードキャストを設定する

● Redis パブリケーションをサブスクライブするための継続的なサービスを提供し、WebSocket プロトコルを通じてパブリッシュされたコンテンツをクライアントにプッシュします。

## クライアントはサーバーの WebSocket トンネルを開き、イベントをサブスクライブし、指定されたイベントを応答する。

Laravel 関連の技術記事の詳細については、

Laravel Framework Getting Started Tutorial

列にアクセスして学習してください。

以上がLaravelインスタントアプリケーションの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP でオブジェクト リレーショナル マッピング (ORM) を使用してデータベース操作を簡素化するにはどうすればよいですか? PHP でオブジェクト リレーショナル マッピング (ORM) を使用してデータベース操作を簡素化するにはどうすればよいですか? May 07, 2024 am 08:39 AM

PHP でのデータベース操作は、オブジェクトをリレーショナル データベースにマップする ORM を使用して簡素化されます。 Laravel の EloquentORM を使用すると、オブジェクト指向構文を使用してデータベースと対話できます。モデル クラスを定義したり、Eloquent メソッドを使用したり、実際にブログ システムを構築したりすることで ORM を使用できます。

Laravel と CodeIgniter の最新バージョンの比較 Laravel と CodeIgniter の最新バージョンの比較 Jun 05, 2024 pm 05:29 PM

Laravel 9 と CodeIgniter 4 の最新バージョンでは、更新された機能と改善が提供されます。 Laravel9はMVCアーキテクチャを採用しており、データベース移行、認証、テンプレートエンジンなどの機能を提供します。 CodeIgniter4 は、HMVC アーキテクチャを使用してルーティング、ORM、およびキャッシュを提供します。パフォーマンスの面では、Laravel9 のサービスプロバイダーベースの設計パターンと CodeIgniter4 の軽量フレームワークにより、優れたパフォーマンスが得られます。実際のアプリケーションでは、Laravel9 は柔軟性と強力な機能を必要とする複雑なプロジェクトに適しており、CodeIgniter4 は迅速な開発や小規模なアプリケーションに適しています。

Laravel - アーティザンコマンド Laravel - アーティザンコマンド Aug 27, 2024 am 10:51 AM

Laravel - アーティザン コマンド - Laravel 5.7 には、新しいコマンドを処理およびテストするための新しい方法が付属しています。これには職人コマンドをテストする新しい機能が含まれており、そのデモについては以下で説明します。

Laravel と CodeIgniter のデータ処理機能はどのように比較されますか? Laravel と CodeIgniter のデータ処理機能はどのように比較されますか? Jun 01, 2024 pm 01:34 PM

Laravel と CodeIgniter のデータ処理機能を比較します。 ORM: Laravel はクラスとオブジェクトのリレーショナル マッピングを提供する EloquentORM を使用しますが、CodeIgniter は ActiveRecord を使用してデータベース モデルを PHP クラスのサブクラスとして表します。クエリビルダー: Laravel には柔軟なチェーンクエリ API がありますが、CodeIgniter のクエリビルダーはよりシンプルで配列ベースです。データ検証: Laravel はカスタム検証ルールをサポートする Validator クラスを提供しますが、CodeIgniter には組み込みの検証関数が少なく、カスタム ルールの手動コーディングが必要です。実践例:ユーザー登録例はLarを示しています

Laravel と CodeIgniter ではどちらが初心者に優しいでしょうか? Laravel と CodeIgniter ではどちらが初心者に優しいでしょうか? Jun 05, 2024 pm 07:50 PM

初心者にとって、CodeIgniter は学習曲線が緩やかで機能は少ないですが、基本的なニーズはカバーしています。 Laravel は幅広い機能セットを提供しますが、学習曲線はわずかに急になります。パフォーマンスの点では、Laravel と CodeIgniter はどちらも良好なパフォーマンスを示します。 Laravel にはより広範なドキュメントとアクティブなコミュニティ サポートがあり、CodeIgniter はよりシンプルで軽量で、強力なセキュリティ機能を備えています。ブログアプリケーションを構築する実際のケースでは、Laravel の EloquentORM を使用するとデータ操作が簡素化されますが、CodeIgniter ではより手動の構成が必要になります。

Laravel と CodeIgniter: 大規模プロジェクトにはどちらのフレームワークが適していますか? Laravel と CodeIgniter: 大規模プロジェクトにはどちらのフレームワークが適していますか? Jun 04, 2024 am 09:09 AM

大規模プロジェクト用のフレームワークを選択する場合、Laravel と CodeIgniter にはそれぞれ独自の利点があります。 Laravel はエンタープライズレベルのアプリケーション向けに設計されており、モジュール設計、依存関係の注入、強力な機能セットを提供します。 CodeIgniter は、速度と使いやすさを重視した、小規模から中規模のプロジェクトに適した軽量フレームワークです。複雑な要件と多数のユーザーを伴う大規模なプロジェクトには、Laravel のパワーとスケーラビリティがより適しています。単純なプロジェクトやリソースが限られている状況では、CodeIgniter の軽量で迅速な開発機能がより理想的です。

PHPコードの単体テストと統合テスト PHPコードの単体テストと統合テスト May 07, 2024 am 08:00 AM

PHP 単体テストおよび統合テスト ガイド 単体テスト: コードまたは関数の単一単位に焦点を当て、PHPUnit を使用して検証用のテスト ケース クラスを作成します。統合テスト: 複数のコードユニットがどのように連携するかに注意し、PHPUnit の setUp() メソッドと TearDown() メソッドを使用してテスト環境をセットアップおよびクリーンアップします。実際のケース: PHPUnit を使用して、データベースの作成、サーバーの起動、テストコードの作成など、Laravel アプリケーションの単体テストと統合テストを実行します。

Laravel と CodeIgniter: 小規模プロジェクトにはどちらのフレームワークが適していますか? Laravel と CodeIgniter: 小規模プロジェクトにはどちらのフレームワークが適していますか? Jun 04, 2024 pm 05:29 PM

小規模なプロジェクトの場合、Laravel は強力な機能とセキュリティを必要とする大規模なプロジェクトに適しています。 CodeIgniter は、軽量さと使いやすさを必要とする非常に小規模なプロジェクトに適しています。

See all articles