SignalR を使用して、Azure Web サイトに接続されているクライアントにメッセージを送信する Windows Server 2012 仮想マシン上の Azure クラウド サービスに格納されている Web サービスに取り組んでいます。メッセージを送信する SignalR のパフォーマンスをテストするために、クライアントに送信されるさまざまなメッセージをシミュレートする特別なエンドポイントを設計しました。
エンドポイントにアクセスすると、400 個の定義済みイベント オブジェクトを含むリストが繰り返されます。各オブジェクトはデータベースに保存され、オブジェクトが保存された後、メッセージがクライアントに送信されます。合計で 400 のメッセージが送信されます。最初のメッセージは非常に速く到着しますが、後続のメッセージはより遅く配信され、接続されているすべてのクライアントに対して最大 20 分かかります (現在、Firefox で Web サイトを開いた 5 つのクライアントのみでテストしています。すべてのメッセージを受信するには時間がかかります)。
メッセージを送信するために、イベントがデータベースに保存された後に使用する関数は次のようになります。
public void SendEvent(string deviceId, Events event)
{
Connection conn = new Connection(url + "/Index");
try
{
conn.Start().Wait();
DevicesDao devicesDao = new DevicesDao();
ClustersDao clustersDao = new ClustersDao();
RegionsDao regionesDao = new RegionsDao();
Devices device= devicesDao.GetDevice(deviceId);
Clusters cluster = clustersDao.GetCluster(device.ClustersClusterId);
List<Devices> devices = cluster.Devices.ToList();
Regions region = regionsDao.GetRegionsById(cluster.RegionsRegionId);
Pin pin = new Pin(device.Latitude, device.Longitude, event.CurrentDate, event.IMax, event.AMax, device.UniqueId, device.Alias, device, cluster, region);
List<Pin> list = new List<Pin>();
list .Add(pin);
var json = new JavaScriptSerializer().Serialize(list);
conn.Send(json).Wait();
}
catch (Exception ex)
{
Debug.WriteLine("Error " + ex.Message + " \n Inner Exception " + ex.InnerException + " \n Stack Trace " + ex.StackTrace);
}
}
Javascript クライアントでは、次のようなメッセージを受け取ります。
connection = $.connection('/Index');
connection.received(function (data) {
if (isSismosShown) {
setPoints(data);
}
});
connection.start().done({transport: 'longPolling'}, function () {
console.log('connection ready');
});
Web サービスが Azure に格納されているため、SignalR ページからパフォーマンス チューニングを試すことができるかどうかわかりません。Azure を使用した経験はあまりありません。Azure の Web サービスからメッセージが送信される速度を改善するには、どのようなオプションがありますか?