Redis、Websocket、Vue.jsを使用して通知サービスを作成する方法
Webアプリケーションでナビゲートするときに、リアルタイムの通知を受け取ることは非常に一般的です。通知は、チャットボット、アラートシステムから送信されるか、アプリが1人以上のユーザーにプッシュするイベントによってトリガーされる可能性があります。通知のソースが何であれ、開発者はますますRedisを使用して通知サービスを作成しています。
マイクロサービスアーキテクチャを利用した最新のアプリケーションでは、Redisは単純なキャッシュおよびプライマリデータベースとしてよく使用されます。ただし、有名なPub / Sub(パブリッシュ/サブスクライブ)コマンドを使用する軽量のイベントシステムであるRedisStreamsを利用した永続的なメッセージングレイヤーを使用するサービス間の通信レイヤーとしても使用されます。
このブログ投稿では、Redis Pub / Subを使用して、Vue.js、Node.js、およびWebSocketsで開発されたWebアプリケーションにメッセージを送信する小さな通知サービスを簡単に作成できることを示します。
前提条件
このデモサービスは以下を使用します:
- Docker
- Redis 5.0.x以降(このデモではRedis Dockerコンテナを使用)
- Node.js 10.xとノードパッケージマネージャー(npm)
- nodemon、開発中にアプリケーションを自動的に再起動するシンプルなツール
- Vue CLI
Redisサーバーの起動
まだRedisインスタンスを実行していない場合は、Dockerを使用してインスタンスを起動できます。ターミナルで、次のコマンドを実行します:
> docker run -it --rm --name redis-server -p 6379:6379 redis
これで、Redisが稼働し、接続を受け入れる準備ができているはずです。
Node.jsを使用したWebSocketサーバーの作成
プロジェクトを適切な構造で構成するには、ターミナルを開き、次のコマンドを入力します。
npm を使用して新しいNode.jsプロジェクトを作成します(-yパラメーターはすべての値をデフォルト値に設定します) :
上記の最後のコマンドは、WebSocketとRedisの依存関係をプロジェクトに追加します。これで、コードを書く準備ができました!
WebSocketサーバーの作成
Node.js用のお気に入りのコードエディター(私はVisual Studio Codeを使用しています)を開き、コード“code。”を入力するだけです。 現在のディレクトリを開きます。エディターで、 server.jsという名前の新しいファイルを作成します 。
この単純なNode.jsプログラムはデモンストレーションに限定されており、以下に焦点を当てています。
- Redisへの接続(9行目)
- 「app:notifications」からのメッセージを購読する チャネル(10行目)
- WebSocketサーバーの起動(13行目)
- ユーザークライアント接続の登録(16行目)
- Redisサブスクライブイベントを聞く(19行目)
- そして、すべてのWebSocketクライアントにメッセージを送信します(21)。
5行目と6行目は、Redisサーバーの場所とWebSocketサーバーに使用するポートを構成するために使用されています。ご覧のとおり、非常に簡単です。
WebSocketサーバーの実行
nodemonをまだインストールしていない場合 、今すぐインストールしてください。次に、次のコマンドを使用してWebSocketサーバーを起動します。
次に、通知を受信してユーザーに印刷するフロントエンドを作成しましょう。
Vue.jsを使用したフロントエンドの作成
新しいターミナルを開き、通知から次のコマンドを実行します ディレクトリ:
Vue CLIツールをまだインストールしていない場合は、コマンド npm install -g @ vue / cliを使用してインストールします。 。
このコマンドは、実行および拡張の準備ができている新しいVueプロジェクトを作成します。
このデモ用にインストールする最後のパッケージはBootstrapVueです。これにより、人気のあるBootstrapフレームワークのCSSライブラリとコンポーネントを簡単に使用できます。
お気に入りのコードエディタでweb-clientディレクトリを開き、新しく作成したVueアプリケーションを起動します。
最後のコマンドは、ページを提供するVue開発サーバーを起動し、ページを変更すると自動的にページを再読み込みします。
ブラウザを開き、http:// localhost:8080にアクセスします。デフォルトのVueウェルカムページが表示される場所:
フロントエンドへのWebSocketの追加
Vueフレームワークは非常にシンプルです。この投稿では、コードを可能な限りシンプルに保ちます。それでは、ディレクトリ構造を簡単に見てみましょう。
├── README.md ├── babel.config.js ├── node_modules ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ └── index.html └── src ├── App.vue ├── assets │ └── logo.png ├── components │ └── HelloWorld.vue └── main.js
ルートレベルのファイル( babel.config.js 、 package.json 、 package-lock.json 、 node_modules )はプロジェクトの構成に使用されます。少なくとも今のところ、最も興味深い部分は srcにあります ディレクトリ:
- main.js fileは、アプリケーションのメインJavaScriptファイルであり、すべての一般的な要素をロードして、 App.vueを呼び出します。 メインスクリーン。後で変更して、ブートストラップサポートを追加します。
- App.vue 特定のページまたはテンプレートのHTML、CSS、およびJavaScriptに含まれるファイルです。アプリケーションのエントリポイントとして、この部分はデフォルトですべての画面で共有されるため、このファイルに通知クライアントの部分を書き込むのに適した場所です。
public / index.html DOMがロードされる静的エントリポイントです。これを見ると、
このデモは非常に単純で、 App.vueの2つのファイルのみを変更する必要があります。 およびmain.js ファイル。実際のアプリケーションでは、さまざまな場所で再利用されるVue.jsコンポーネントを作成する可能性があります。
App.vueファイルを更新してWebSocketメッセージを表示する
App.vueを開きます エディターでファイルを作成し、以下にリストされている情報を追加します。ページ下部の
{{message}}表記を使用して、次のブロックで定義するメッセージ変数のコンテンツを出力するようにVueに指示しています。
内 、コンテンツを次のように置き換えます:
これらの数行のコードは、次の目的で使用されます。
- WebSocketサーバーに接続します(13行目)
- サーバーからのメッセージを消費し、ローカルのメッセージを送信します 変数(13〜17行目)
何が変更されたかを注意深く見ると、追加したことがわかります。
- data() 画面自体にバインドできるローカル変数を定義していることをVueコンポーネントに示す関数(6〜10行目)
- created() 初期化時にVueコンポーネントによって自動的に呼び出される関数
RedisからVueアプリケーションにメッセージを送信する
追加したJavaScriptの数行のおかげで、WebSocketサーバーとVueフロントエンドが実行され接続されているはずです。テストする時が来ました!
Redis CLIまたはRedisInsightを使用して、いくつかのメッセージを app:notificationsに公開します チャネル。たとえば、Dockerを使用してRedisを起動した場合は、次のコマンドを使用してRedisに接続し、メッセージの公開を開始できます。
ブラウザのアプリケーションの下部にメッセージが表示されるはずです:
ご覧のとおり、WebSocketを使用して、コンテンツをWebフロントエンドにリアルタイムでプッシュするのは非常に簡単です。それでは、デザインを改善し、Bootstrapを使用してよりユーザーフレンドリーなインターフェースを追加しましょう。
Bootstrapを使用したアラートブロックの作成
このセクションでは、ブートストラップアラートコンポーネントの使用方法を説明します。このコンポーネントは、新しいメッセージを受信すると表示され、数秒後に簡単なカウントダウンを使用して自動的に消えます。
Main.jsファイル
main.jsファイルを開き、最後のインポートの後に次の行を追加します。
これらの4行は、ブートストラップコンポーネントをインポートしてVueアプリケーションに登録します。
App.jsファイル
App.vue内 ファイル、前に追加したコードを置き換えます(2つの
の間のすべて タグとタグ自体)次のように:
このコンポーネントはいくつかの属性を使用します:
- id =”通知” JavaScriptまたはCSSコードで要素を参照するために使用される要素IDです:show =” dismissCountDown” dismissCountDownの場合にのみコンポーネントが表示されることを示します 変数がnullでも0でもない
- 却下 アラートに小さなアイコンを追加して、ユーザーが手動で閉じることができるようにします
- @ dismissed =” dismissCountDown =0” は、アラートボックスが閉じられ、値 dismissCountDownが閉じられることを示しています。 0に等しい
- @ dismiss-count-down =” countDownChanged” カウントダウン方法です
アラートコンポーネントで使用される変数とメソッドを定義するために、JavaScriptを数行追加しましょう。
このセクションには次のものがあります:
- dismissSecsを追加しました およびdismissCountDown アラートを再び非表示にする前にアラートを表示するタイマーを制御するために使用されるdata()メソッドの変数(4〜5行目)
- アラートコンポーネントを表示および非表示にするメソッドを作成しました(10〜26行目)
- showAlert()と呼ばれます 新しいメッセージを受信したときのメソッド(13行目)
やってみましょう!
redis-cliまたはRedisInsightに戻り、新しいメッセージを app:notificationsに投稿します チャネル。
ご覧のとおり、Redisを使用して、アプリケーションの強力な通知サービスを簡単に作成できます。このサンプルは非常に基本的なもので、単一のチャネルとサーバーを使用し、すべてのクライアントにブロードキャストします。
目標は、WebSocketとRedis Pub / Subを使用して、RedisからWebアプリケーションにメッセージをプッシュする簡単な方法を提供することでした。さまざまなチャネルを使用して特定のクライアントにメッセージを配信し、アプリケーションを拡張および保護するための多くのオプションがあります。
WebSocketサーバーを反対方向に使用して、メッセージを消費したり、クライアントにメッセージをプッシュしたりすることもできます。しかし、それは別のブログ投稿にとって大きなトピックです。実際、Redis Gearsを使用してRedisデータベースに直接イベントを簡単にキャプチャし、いくつかのイベントをさまざまなクライアントにプッシュする方法についてのブログ投稿にご注目ください。
詳細については、次のリソースを参照してください。
- ダミー向けRedisマイクロサービス(無料の電子書籍)
- Redis Streamsの概要(Redisドキュメント)
- Redis Pub / Sub(Redisドキュメント)
- Redis大学で無料のオンラインコースを受講する
- RedisEnterpriseCloudをチェックしてください
-
Redis SADD –セットに要素を作成して追加する方法
このチュートリアルでは、コマンド– SADD を使用して、キーに格納されている設定値に要素を作成および追加する方法について学習します。 redis-cliで。キーがデータストアに存在する場合、指定されたすべての要素がセットに追加されます(すでに存在する要素は無視されます)。そうでない場合は、セットに追加する前に新しいセットが作成されます。 redis SADDコマンドの構文は次のとおりです:- 構文:- redis host:post> SADD <key name> <value 1> [ <value 2> ] 出力:- - (integ
-
Redis GEOADD –地理空間値で要素を作成および追加する方法
このチュートリアルでは、キーに格納されている地理空間値に要素を作成して追加する方法について学習します。このために、Redis GEOADDを使用します コマンド。 GEOADDコマンド このコマンドは、キーに格納されている地理空間値に1つ以上の指定された地理空間メンバーを追加するために使用されます。地理空間値は、このコマンドを使用して入力されるソートされたセットに他なりません。地理空間メンバーは、GEORADIUSコマンドとGEORADIUSBYMEMBERコマンドを使用して半径によるクエリを使用して後でメンバーを取得できるように、並べ替えられたセットに追加されます。 並べ替えられたセ