0

我正在开发一个 Web 服务,该服务存储在 Windows Server 2012 虚拟机上的 Azure 云服务中,该虚拟机使用 SignalR 向连接到 Azure 网站的客户端发送消息。为了测试 SignalR 发送消息的性能,我们设计了一个特殊的端点来模拟发送到客户端的不同消息。

访问端点时,将迭代包含 400 个预定义事件对象的列表。然后将每个对象存储在数据库中,并在存储对象后向客户端发送一条消息,总共应发送 400 条消息。第一条消息到达速度很快,但随后的消息传递速度较慢,所有连接的客户端最多需要 20 分钟(我们目前仅在 Firefox 上打开网站的 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 服务发送消息的速度?

4

0 回答 0