首页 > 解决方案 > 如何减少signalR中的消息大小?

问题描述

我正在使用 siglarR 自助托管服务,我的问题是消息大小,我想将大小从 1kb 减小到仅 30 字节,因为我正在从事股票市场服务,该服务非常频繁地发送数据但消息大小很小,但 signalR 需要最小消息大小是 1kb,它需要巨大的网络带宽。如果您有任何解决方案,请告诉我。

像'123|234.52|568'这样的消息示例 // 请在下面找到更新的代码:

应用程序向服务器代码发送消息

if (IsConnected)
    {
        try
        {
            if (Convert.ToBoolean(ConfigurationManager.AppSettings["IsJsonData"].ToString()))
            {
                var obj = new
                {
                    id = SymbolId,
                    head = colName_no,
                    value = string.Format("{0:0.####}", Double.Parse(newValue))
                };
                _hub.Invoke("ServerAlert", SymbolId, JsonConvert.SerializeObject(obj));
            }
            else
            {
                _hub.Invoke("ServerAlert", SymbolId, data);
            }
        }
        catch (Exception ex)
        {
            GenerateLog(ex.ToString() + "   " + JsonConvert.SerializeObject(dtrow), "server hub");
        }
    }

##服务器端代码##

public async void ServerAlert(string groupName, string message)
    {
        //await Clients.All.StockAlert(message);
        //string Delimiter = ConfigurationManager.AppSettings["SplitMessage"].ToString();
        Clients.Group(groupName).GroupStockAlert(message);
    }

客户端接收消息代码

objMainForm._hub.On("GroupStockAlert", (x) =>
            {
                try
                {
                    objMainForm.LastPingDateTime = DateTime.Now;
                    string[] ChangeData = x.Split(new string[] { objMainForm.Delimeter }, StringSplitOptions.RemoveEmptyEntries);
                    DataRow[] row = objMainForm.dtOnlineData.Select("SymbolId='" + ChangeData[0] + "'");
                    int RowIndex = objMainForm.dtOnlineData.Rows.IndexOf(row[0]);
                    DataTable Dt_ColumnName = objMainForm.dtAllHeaders.Select("RowNo='" + ChangeData[1] + "'").CopyToDataTable();
                    string exceldata = "t!!" + ChangeData[0] + "!!" + Dt_ColumnName.Rows[0]["Header"].ToString() + "!!" + ChangeData[2];
                    if (this.InvokeRequired)
                        this.Invoke(new livedata(this.ProcessServerData), new object[] { RowIndex, Dt_ColumnName.Rows[0]["Header"], ChangeData[2], ChangeData[0] });
                    ChangeData = null;
                    row = null;
                    RowIndex = 0;
                }
                catch (Exception ex)
                {
                }
                finally
                {
                    GC.SuppressFinalize(this);
                }
            }); 

谢谢大家

标签: c#signalr

解决方案


推荐阅读