sql >> データベース >  >> NoSQL >> Redis

SignalR.Redisは内部でどのように機能しますか?

    ホワイトペーパーはありません。200行のコードのようなものなので、飲み込むほどではありません。

    SignalRでは、各メッセージはメッセージバスと呼ばれるものを通過します。ノード(またはプロセスやアプリドメイン)間でスケールアウトする場合、このバスの実装は、アプリケーションの各インスタンスと通信できる必要があります。これを行うには、RedisMessageBusを使用できます。 Redisにはpubsubメカニズムと、キーと値のペアを格納する機能があり、SignalRには前者のみを使用します。

    OffTopic:これは非常に重要です! SignalRは信頼できるメッセージングではなく、接続の抽象化です。ロングポーリングのためにメッセージをバッファリングする場合がありますが、メッセージが永遠に存在することを**信頼することはできません*。永続化する必要のある重要なメッセージがある場合は、それらを永続化します。

    各Webサーバーは1つ(または新しい実装では複数)のredisイベントに接続して、それらの間でメッセージを送信します。 1つ以上のクライアントにメッセージが届くと、メッセージはバックプレーン(redis)に送信され、すべてのWebサーバーに到着します。各ウェブサーバーはredisからメッセージを取得し、ローカルキャッシュに保存します。このローカルキャッシュは、SignalRクライアント(ブラウザーなど)が提供される場所です。

    スケールアウト設計の重要な部分の1つは、カーソルです。カーソルは、特定のクライアントがメッセージの無限のストリームのどこにあるかを表します。接続を切断した後にクライアントが再接続するか、メッセージを受け取った後にロングポーリング接続が戻ってくると、カーソル値以降のすべてを取得するようにバスに要求します。カーソルはメッセージバスの実装によって定義され、最新のソースで正規化されています(執筆時点ではまだリリースされていませんが、ここでは詳しく説明しません)。現在のredisの実装のカーソルは、インクリメントされた数値であり、それほど複雑ではありません。

    うまくいけば、それがどのように機能するかについてのいくつかのアイデアを与えるでしょう。




    1. MongoDB:大文字と小文字を区別しないクエリを作成することは可能ですか?

    2. エラー:mongodbに接続しているWindowsでUNIXソケットがサポートされていません

    3. MongoDB-.find()で条件ステートメントを設定する

    4. トップ6の無料Redisメモリ分析ツール