接收到 Class 的 UDP 数据包。 Design/Implementation 感谢协助

Receive UDP packet to Class. Design/Implementation assistance appreciated

我从本地主机接收 UDP 数据。这些数据需要被使用和跟踪。在大约 5 分钟的时间内可能会发送超过 250k 个数据包。目前,我创建了 IPEndPoint,并接收数据。然后我将 byte[] 数据放入一个字符串中。然后我将字符串拆分为一个数组,因为数据是逗号分隔的。从这个数组中,我用数组中的正确值实例化了一个对象。

传入的数据有 4 个属性,如下所示:ProductId=1284,Quantity=48623,Time=08:45:12.034,Date=2019-09-09

目前我能够Console.WriteLine传入数据包,并将每个数据包投射到一个对象(产品)。目前我没有将数据存储在任何地方。

我需要监控数量水平,并在数量超过或低于特定阈值时发送警报。其次,如果 Quantity 的变化超过阈值,我需要发送另一个警报。这我将在稍后使用 if 语句来实现,目前不需要帮助。此警报确实需要在收到 UDP 数据包时发送。

我的问题是:

1) 我应该异步实现这个,还是在不同的线程上实现?

2) 我是否应该将 UDP 数据直接发送到 byte[] 类型的队列,然后将每个 byte[] 出列到一个对象中?或者在接收到 UDP 数据时不断实例化新对象(或更新每个产品的数量)? Queue 是否降低了丢包的风险?

3) 存储每个数据包的最佳方式是什么?到列表(这会将所有内容保存在内存中)、数据库(有点超出我当前的需要),或将每个对象附加到文本文件(易于写入,并最终可以从中构建数据库)?

4) 250k 个数据包是否超过 5 分钟,并且为所有这些数据包创建对象对计算机来说处理量很大?

请告知我是否可以澄清任何问题。如果我的任何术语不正确,我深表歉意,我会学习并修复它。我应该能够自己弄清楚编码,这是我要求指导的设计和正确实施。谢谢。

下面是建立UDP连接的代码,class。正确设置 UDP 后,我将能够计算出 monitoring/messaging 数量信息。我有一个产品 Class 没有显示,它有几个属性,包括 ProductId、数量、初始数量、数量变化、时间和日期。

class Program
    {
        static void Main(string[] args)
        {
            int port = 22486;
            var client = new UdpClient();
            IPEndPoint localEp = new IPEndPoint(IPAddress.Any, port);
            client.Client.Bind(localEp);

            while (true)
            {
                try
                {
                    byte[] data = client.Receive(ref localEp);
                    string text = Encoding.UTF8.GetString(data);
                    string[] message = text.Split(',', '=');
                    Product product = new Product();
                    product.ProductId = message[1];
                    product.Quantity = message[3];
                }
                catch (Exception err)
                {
                    Console.WriteLine(err.ToString());
                }
            }
        }
    }
  1. 如果您需要在侦听该端口的同时做其他事情,请将其设为线程。

  2. 将它排入一个字节数组...各种缓冲区。

  3. 天蓝色斑点适合您吗?您可以使用存储模拟器,如果您改变主意将文件存储在 blob 中,您可以切换到 table 存储(这类似于提供分区名称的 nosql 方法。)