ABP理論学習のSignalR集積
6034 ワード
総ディレクトリに戻る
紹介 取付 接続を確立する 内蔵機能 あなた自身のSignaRコード
Abp.Web.SignalRはABPベースのアプリケーションでのSignalRの使用をかなり容易にする.SignalRの詳細については、SignalRドキュメントを参照してください.
App.Web.SignalRnugetパッケージは、あなたのプロジェクト(一般的にはwebレイヤ)にインストールされ、モジュールに依存を追加します.
次に、OWIN StartupクラスでMapSignalRメソッドを使用します.
注意:App.Web.SignalRはMicrosoftのみに依存する.AspNet.SignalR.Coreパッケージ.そのため、前にインストールしていない場合は、Microsoftも必要です.AspNet.SignalRはあなたのwebプロジェクトにインストールされます.
ページにabpを追加するべきです.signalr.jsスクリプト.AppにありますWeb.Resourcesパッケージ(起動モジュールにインストールされています).signalrバスの後に含める必要があります.
このようにして、SignalRは構成され、あなたのプロジェクトに統合されます.
ページにabpが含まれている場合.signalr.jsの場合、ABPはサーバ(クライアントから)に自動的に接続されます.一般的にはこれはいいですが、あなたがこのようなことをしたくない場合もあります.abpを含めてsignalr.jsの前に次のコードを追加して自動接続を閉じます.
これにより、サーバに接続する必要がある場合、abpを手動で呼び出すことができます.signalr.connect()関数.
クライアントがサーバに接続されると、グローバルイベント「abp.signalr.connected」がトリガーされます.接続が正常に確立されると、イベントに登録して対応するアクションを実行できます.
SignalRのすべての機能をアプリケーションで使用することができます.また、App.Web.SignalRパッケージには、いくつかの内蔵機能が実装されています.
Abp.Web.SignalRパッケージは、IrealTimeNotifierを実装してクライアントにリアルタイム通知を送信します(「通知システム」を参照).したがって、ユーザーはリアルタイムのプッシュ通知を得ることができます.
ABPは、オンラインユーザーに関する情報を取得するためにIOnlineClientManagerを提供します(たとえば、IOnlineClientManagerを注入し、GetByUserIdOrNull、GetAllClients、IsOnlineメソッドを使用します).正しく動作するためには、IOnlineClientManagerには通信インフラストラクチャが必要です.Abp.Web.SignalRはこのようなインフラストラクチャを提供しています.したがって、SignalRがインストールされている場合は、アプリケーションのどのレイヤでもIOnlineClientManagerを注入して使用できます.
Abp.Web.SignalRパッケージは、シリアル化時にCamelCasePropertyNamesContractResolverを使用してSignalRのデフォルトのContractResolverを上書きします.したがって、サービス側のクラスにはPascalCaseプロパティがあり、クライアントではcamelCaseとしてオブジェクトを送信/受信するために使用されます(javascriptではcamelCaseがより人気のある名前であるため).一部のプログラムセットでこれを無視したい場合は、それらのプログラムセットをAppSignalRContractResolverに追加することができます.IgnoredAssembliesリストにあります.
Abp.Web.SignalRパッケージもあなたのSignalRコードを簡略化しました.アプリケーションにハブ(Hub)を追加したいとします.
私たちはITransientDependencyを実現して、私たちのハブhubを依存注入システムに登録することを簡略化しました(あなたのニーズに基づいて、それを単例の【singleton】).属性もsessionとloggerに注入した.
SendMessageはhubの方法であり、クライアントによって使用することができる.この方法では,すべてのクライアントのgetMessage関数を呼び出すことができる.ご覧のように、AppSessionを使用して現在のユーザーIDを取得できます(ユーザーがシステムにログインしている場合).プレゼンテーションのために、OnConnectedとOnDisconnectedも書き換えましたが、実際にはここでは必要ありません.
ここで、クライアントのjavascriptコードは、私たちのハブhubを使用して情報を送信/受信します.
そして、いつでもサーバにメッセージを送信する必要がある場合は、chatHubを使用することができます.ここで、SignalRの詳細については、SinalRドキュメントの表示をクリックしてください.
本編目録
紹介する
Abp.Web.SignalRはABPベースのアプリケーションでのSignalRの使用をかなり容易にする.SignalRの詳細については、SignalRドキュメントを参照してください.
インストール
サービス側
App.Web.SignalRnugetパッケージは、あなたのプロジェクト(一般的にはwebレイヤ)にインストールされ、モジュールに依存を追加します.
[DependsOn(typeof(AbpWebSignalRModule))]
public class YourProjectWebModule : AbpModule
{
//...
}
次に、OWIN StartupクラスでMapSignalRメソッドを使用します.
[assembly: OwinStartup(typeof(Startup))]
namespace MyProject.Web
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
//...
}
}
}
注意:App.Web.SignalRはMicrosoftのみに依存する.AspNet.SignalR.Coreパッケージ.そのため、前にインストールしていない場合は、Microsoftも必要です.AspNet.SignalRはあなたのwebプロジェクトにインストールされます.
クライアント
ページにabpを追加するべきです.signalr.jsスクリプト.AppにありますWeb.Resourcesパッケージ(起動モジュールにインストールされています).signalrバスの後に含める必要があります.
<script src="~/signalr/hubs"></script>
<script src="~/Abp/Framework/scripts/libs/abp.signalr.js"></script>
このようにして、SignalRは構成され、あなたのプロジェクトに統合されます.
接続の確立
ページにabpが含まれている場合.signalr.jsの場合、ABPはサーバ(クライアントから)に自動的に接続されます.一般的にはこれはいいですが、あなたがこのようなことをしたくない場合もあります.abpを含めてsignalr.jsの前に次のコードを追加して自動接続を閉じます.
<script>
abp.signalr = abp.signalr || {};
abp.signalr.autoConnect = false;
</script>
これにより、サーバに接続する必要がある場合、abpを手動で呼び出すことができます.signalr.connect()関数.
クライアントがサーバに接続されると、グローバルイベント「abp.signalr.connected」がトリガーされます.接続が正常に確立されると、イベントに登録して対応するアクションを実行できます.
組み込み機能
SignalRのすべての機能をアプリケーションで使用することができます.また、App.Web.SignalRパッケージには、いくつかの内蔵機能が実装されています.
通知
Abp.Web.SignalRパッケージは、IrealTimeNotifierを実装してクライアントにリアルタイム通知を送信します(「通知システム」を参照).したがって、ユーザーはリアルタイムのプッシュ通知を得ることができます.
オンラインクライアント
ABPは、オンラインユーザーに関する情報を取得するためにIOnlineClientManagerを提供します(たとえば、IOnlineClientManagerを注入し、GetByUserIdOrNull、GetAllClients、IsOnlineメソッドを使用します).正しく動作するためには、IOnlineClientManagerには通信インフラストラクチャが必要です.Abp.Web.SignalRはこのようなインフラストラクチャを提供しています.したがって、SignalRがインストールされている場合は、アプリケーションのどのレイヤでもIOnlineClientManagerを注入して使用できます.
PascalCase vs. camelCase
Abp.Web.SignalRパッケージは、シリアル化時にCamelCasePropertyNamesContractResolverを使用してSignalRのデフォルトのContractResolverを上書きします.したがって、サービス側のクラスにはPascalCaseプロパティがあり、クライアントではcamelCaseとしてオブジェクトを送信/受信するために使用されます(javascriptではcamelCaseがより人気のある名前であるため).一部のプログラムセットでこれを無視したい場合は、それらのプログラムセットをAppSignalRContractResolverに追加することができます.IgnoredAssembliesリストにあります.
あなた自身のSignaRコード
Abp.Web.SignalRパッケージもあなたのSignalRコードを簡略化しました.アプリケーションにハブ(Hub)を追加したいとします.
public class MyChatHub : Hub, ITransientDependency
{
public IAbpSession AbpSession { get; set; }
public ILogger Logger { get; set; }
public MyChatHub()
{
AbpSession = NullAbpSession.Instance;
Logger = NullLogger.Instance;
}
public void SendMessage(string message)
{
Clients.All.getMessage(string.Format("User {0}: {1}", AbpSession.UserId, message));
}
public async override Task OnConnected()
{
await base.OnConnected();
Logger.Debug("A client connected to MyChatHub: " + Context.ConnectionId);
}
public async override Task OnDisconnected(bool stopCalled)
{
await base.OnDisconnected(stopCalled);
Logger.Debug("A client disconnected from MyChatHub: " + Context.ConnectionId);
}
}
私たちはITransientDependencyを実現して、私たちのハブhubを依存注入システムに登録することを簡略化しました(あなたのニーズに基づいて、それを単例の【singleton】).属性もsessionとloggerに注入した.
SendMessageはhubの方法であり、クライアントによって使用することができる.この方法では,すべてのクライアントのgetMessage関数を呼び出すことができる.ご覧のように、AppSessionを使用して現在のユーザーIDを取得できます(ユーザーがシステムにログインしている場合).プレゼンテーションのために、OnConnectedとOnDisconnectedも書き換えましたが、実際にはここでは必要ありません.
ここで、クライアントのjavascriptコードは、私たちのハブhubを使用して情報を送信/受信します.
var chatHub = $.connection.myChatHub; // hub
chatHub.client.getMessage = function (message) { //
console.log('received message: ' + message);
};
abp.event.on('abp.signalr.connected', function() { //
chatHub.server.sendMessage("Hi everybody, I'm connected to the chat!"); //
});
そして、いつでもサーバにメッセージを送信する必要がある場合は、chatHubを使用することができます.ここで、SignalRの詳細については、SinalRドキュメントの表示をクリックしてください.