接收到 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());
}
}
}
}
如果您需要在侦听该端口的同时做其他事情,请将其设为线程。
将它排入一个字节数组...各种缓冲区。
天蓝色斑点适合您吗?您可以使用存储模拟器,如果您改变主意将文件存储在 blob 中,您可以切换到 table 存储(这类似于提供分区名称的 nosql 方法。)
否
我从本地主机接收 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());
}
}
}
}
如果您需要在侦听该端口的同时做其他事情,请将其设为线程。
将它排入一个字节数组...各种缓冲区。
天蓝色斑点适合您吗?您可以使用存储模拟器,如果您改变主意将文件存储在 blob 中,您可以切换到 table 存储(这类似于提供分区名称的 nosql 方法。)
否